Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中注释掉的代码在呈现时如何(或为什么)导致HTML模板出错?_Javascript_Flask - Fatal编程技术网

Javascript中注释掉的代码在呈现时如何(或为什么)导致HTML模板出错?

Javascript中注释掉的代码在呈现时如何(或为什么)导致HTML模板出错?,javascript,flask,Javascript,Flask,我正在使用Flask创建一个应用程序,因此客户端通常使用Flask,服务器端使用Python 在脚本部分通过新的JavaScript代码添加一些新功能时,我的一个模板在渲染时开始出错。当我注释掉这段新代码时,错误继续发生 考虑到我可能在Python方面犯了一个错误,我注释掉了所有与最新更改相关的新代码,但错误仍然存在。我收到的错误是: 内部服务器错误 服务器遇到内部错误,无法完成 你的要求。服务器过载或中存在错误 应用程序 //var JSONarrayOfWords = {{ JSON_all

我正在使用Flask创建一个应用程序,因此客户端通常使用Flask,服务器端使用Python

在脚本部分通过新的JavaScript代码添加一些新功能时,我的一个模板在渲染时开始出错。当我注释掉这段新代码时,错误继续发生

考虑到我可能在Python方面犯了一个错误,我注释掉了所有与最新更改相关的新代码,但错误仍然存在。我收到的错误是:

内部服务器错误

服务器遇到内部错误,无法完成 你的要求。服务器过载或中存在错误 应用程序

//var JSONarrayOfWords = {{ JSON_allRowsForSpecificLanguage| tojson}};     //populate a JSON array from the (jinja?) FLASK array (originally a LIST in python)
事实证明,一行JavaScript代码导致了这个呈现错误。注释它没有什么区别-我必须完全删除它,然后我的模板才能正确呈现

以前有人遇到过这种情况吗?这与我在过去20年里作为一名专业程序员所看到的一切背道而驰!下面是导致错误的代码行

如果我将这一行粘贴到应用程序中的任何其他HTML模板中,那么这些模板也不会呈现

我不仅看不到模板出错的有效原因(我的意思是,代码是有效的,应该运行),我还想知道是否有人也经历过这种现象,注释掉的代码在呈现模板时会导致错误

我已经通过重命名变量“修复”了这个问题,但是这样一条线究竟怎么会导致渲染错误呢?任何帮助、想法或类似经历都将是最受欢迎的

关于信息,我正在使用Microsoft Visual Studio(最新的免费版本)开发此应用程序

//var JSONarrayOfWords = {{ JSON_allRowsForSpecificLanguage| tojson}};     //populate a JSON array from the (jinja?) FLASK array (originally a LIST in python)

您需要将代码包装在模板中的
{%raw%}
{%endraw%}
标记中

请看这些:


  • 与这些文章非常相似,我建议不要使用内联JavaScript(永远,真的)。如果您将JavaScript移动到一个文件中,并在Jinja模板中引用该文件,则错误将消失。

    好的,谢谢您在这方面的帮助,mwilson。经过一段时间的实验,情况现在清楚多了

    此代码正常工作并正确呈现:

    <script>
        const const_nativeToForeign = "nativeToForeign";
        const const_foreignToNative = "foreignToNative";
    
        js_currentPointInTestCount          = "{{flask_currentPointInTest}}";
        js_totalWordsInTestCount            = "{{flask_totalWordsInTest}}";
        js_totalCorrectOnFirstTryCount      = "{{flask_totalCorrectOnFirstTryCount}}";
        js_totalCorrectOnSubsequentTryCount = "{{flask_totalCorrectOnSubsequentTryCount}}";
        js_totalGiveUpsCount                = "{{flask_totalGiveUpsCount}}";
        js_actionToTake                     = "{{flask_actionToTake}}";
        //js_translationDirectionOfTest       = "{{flask_translationDirectionOfTest}}";
        js_translationDirectionOfWord       = "{{flask_translationDirectionOfWord}}";
    
        js_nativeWord                       = "{{flask_NativeWord}}";
        js_foreignWord                      = "{{flask_ForeignWord}}";
    
        js_nativeWord                       = "{{flask_NativeWord}}";
        js_foreignWord                      = "{{flask_ForeignWord}}";
    
        JSON_list_direct_object_genders = {{ flask_JSON_list_direct_object_genders | tojson }};
        JS_list_direct_object_genders = JSON.parse(JSON_list_direct_object_genders);
        console.log(JS_list_direct_object_genders);
    
        JSON_list_special_chars = {{ flask_JSON_list_scs | tojson }};
        JS_list_special_chars = JSON.parse(JSON_list_special_chars);
        console.log(JS_list_special_chars);
    
        document.getElementById("btnMoveIt").disabled = true;
        document.getElementById("textGuessInput").focus();
    
    然后它仍然不会渲染(所以它必须在这里检测到jinja?可能是因为双链括号?)

    如果注释掉的行更改为:

    //  JSONsomethingMeaningless = {{
    
    //  JSONsomethingMeaningless = {
    
    i、 仅仅是一个单链括号,HTML文件呈现没有问题,并且做了我期望它做的一切(在能够使用变量等方面)

    因此,这个故事的寓意似乎是,如果HTML文件呈现将注释作为Jinja的行,那么它们就不是真正的注释了

    这个故事的另一个寓意是,我应该更加关注我在Python的render_template()部分中定义的内容


    再次感谢您的帮助,我将查看这些链接。我来自一个Cobol和Delphi(服务器/客户端)的世界,所以这对我来说有点新鲜

    提醒我它仍然在模板中,并且仍然由服务器呈现——在客户端JS代码中注释掉这一行不会改变服务器端的任何内容。您需要一个模板语言注释。代码执行的位置很重要。下面有一个更好的解释,以及我如何解决这个问题。谢谢你的回复。谢谢你的回复,但我认为这并没有什么帮助。我的问题可能还不够清楚,但我正在编写的应用程序已经有100行跨多个模板的代码和一个python文件。在添加一行特定的代码时(除了变量名不同之外,这与我添加的其他代码行相同),我得到了呈现错误。虽然在风格上或功能上不使用内联JavaScript可能更好,但这不是这里的问题。当我注释掉有问题的行时,错误仍然发生。在正确呈现之前,我必须删除它。您遇到的主要问题是jinja模板只理解jinja语法<代码>/不是有效的jinja语法。如果您查看我发送给您的第三个链接,它会注意到jinja中正确的注释语法是
    。第一个链接(GitHub问题)与您的问题非常接近。谢谢您的帮助,mwilson。如果您不介意快速浏览一下,我在下面添加了我自己的答案。我一定会查看你发布的链接,加深我对这个领域的了解!干杯(顺便说一句,我无法对你的答案进行投票,因为我还没有资格!)评论在他们的环境中始终是评论。jinja模板是在服务器上呈现的,它(在本例中)对JavaScript一无所知——它不是jinja中的注释。模板不关心它们呈现的内容。一旦呈现的模板发送到浏览器,浏览器就会呈现其内容,只有这样JS才起作用。这是基本的服务器/客户机行为:代码在不同的地方运行,使用不同的语言,具有不同的语义。