第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我不能在 django 站點的 Javascript 中使用 Jinja?

為什么我不能在 django 站點的 Javascript 中使用 Jinja?

猛跑小豬 2021-09-28 21:23:02
查看完整描述

2 回答

?
慕尼黑的夜晚無繁華

TA貢獻1864條經(jīng)驗 獲得超6個贊

所以對于我們這些使用 Python 和 Django 框架開發(fā)網(wǎng)站的人來說,有一個叫做 jinja 的很棒的工具,它可以用作模板引擎。例如:


而不是像這樣對導入進行硬編碼:


<script src="assets/js/onebutton.js"></script>

我們可以完成這個:


<script src="{% static 'assets/js/onebutton.js' %}"></script>

在這種情況下,它會自動搜索名為 static 的文件夾并進入內(nèi)部查找所需的代碼。


但是為什么不能在 Javascript 中使用 jinja 模板。


例如:


主頁.html


<script src='whatever.js'></script>

<p>Another example</p>

<button id="clickme"> click me </button>

無論如何.js


$(function()

{

$('#clickme').click(function(){

$.ajax({

                    headers : {'X-CSRFToken': getCookie('csrftoken')},

                    type: "POST",

                    url: '{% url "func" %}', //<--Problem arise here

                    datatype:"json",

                    data: {},

                    success: function(data){

                        var new_template = '<h1> %firstmsg% </h1>';

                        var new_frontend = new_template.replace('%firstmsg%',data.message);

                        console.log(new_frontend);

                        document.getElementById('wor').innerHTML+=new_frontend;

                    }

                });

}

}

Django 會將 AJAX 請求中的 url 識別/'{% url "func" %}'為/func


解決這個問題的唯一方法是將整個代碼從移動whatever.js到homepage.html在一個<script></script>塊中。


也許我們需要導入一些東西才能讓 Jinja 模板工作?


查看完整回答
反對 回復 2021-09-28
?
翻閱古今

TA貢獻1780條經(jīng)驗 獲得超5個贊

<script src="{% static 'assets/js/onebutton.js' %}"></script>

在這種情況下,它會自動搜索名為 static 的文件夾并進入內(nèi)部查找所需的代碼。


這是不準確的。它所做的只是將給定的路徑轉(zhuǎn)換為您的設(shè)置文件中提供的靜態(tài)路徑,如下所示 - /static/asssets/js/onebutton.js. 這就對了。Django 或 Jinja2 不會通過文件夾查找文件。它甚至不在乎文件是否存在。


稍后,瀏覽器在收到 html 文檔時會自動從服務器獲取此文件。


回到關(guān)于為什么不能在 JS 文件中使用 Jinja2 或 Django 模板語法的原始問題。嗯,你可以。但是您必須從您的視圖中呈現(xiàn)您的 JS 文件。


現(xiàn)在,我確定您正在使用該render函數(shù)從視圖中返回模板。但是它有什么作用呢?


該render函數(shù)將 django 特定模板標簽轉(zhuǎn)換為適當?shù)?html 內(nèi)容。


因此,如果您在 js 文件中使用 django 或 jinja 的模板語法,則也必須渲染 js 文件。但這似乎是個壞主意。相反,您可以在 html 文件中創(chuàng)建一些全局變量,并在 js 文件中使用它們。


<!-- define required variables in template -->

<script>

    var URL = '{% url ... %}';

    var OTHER_VARIABLE = '{{ other_variable }}';

</script>

<!-- include your js files -->

<script src="/path/to/file.js"></script>


查看完整回答
反對 回復 2021-09-28
  • 2 回答
  • 0 關(guān)注
  • 248 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號