簡體   English   中英

Django將參數傳遞給鏈接的.js腳本模板

[英]Django Passing arguments to linked .js script template

我正在使用highcharts呈現一些圖形。 每個圖都用一個javascript塊定義。 我不想特別為每個使用圖形呈現頁面的.html模板重復相同的代碼,因此我考慮使用highcharts代碼編寫.js模板,並使用如下代碼行進行加載:

<script type="text/javascript" src="/some/url/to/myfile.js"></script>

因此,基本流程是:瀏覽到某些URL> urls.py調用myHtmlView()>呈現html模板>調用外部.js腳本> urls.py調用myJsView()>呈現js模板>圖形出現在網頁上某處。

但是,我有很多參數要提供給呈現此.js模板的視圖。 目前,我在url中傳遞了這些參數,但是由於url變得很長而感到笨拙,並且正則表達式讀取它們的可讀性不是很高。 此外,我想傳遞一些列表,甚至一些查詢集。 有什么更好的方法可以將圖形的代碼存儲在外部模板中? 除了在url中編碼參數並在urls.py中讀取參數之外,還有其他選項可以將參數傳遞給它嗎?

我希望這是有道理的,並且是話題。

編輯:為了完整性:

#urls.py
urlpatterns = patterns(
    (r'^/graph/$', views.myhHtmlView),
    (r'^/js/(?P<myVar>\d+/$', views.myJsView),
    )

#views.py
myHtmlView(request):
    context = {'myVar': 42}
    render(request, 'htmlTemplate.html', context)

myJsView(request, myVar):
    context = {'myVar': myVar}
    render(request, 'jsTemplate.js', context, content_type='text/javascript')

#htmlTemplate.html
<script type="text/javascript" src="/js/{{ myVar }}"></script>
#and the rest of the page...

#jsTemplate.js
#some javascript here for rendering the graph, which uses {{ myVar }}...

回答我自己的問題。 似乎最好的方法是使用自定義的inclusion_taghttps : //docs.djangoproject.com/en/dev/howto/custom-template-tags/#inclusion-tags

所以我現在有:

#urls.py
urlpatterns = patterns(
    (r'^/graph/$', views.myhHtmlView),
    )

#myApp/views.py
myHtmlView(request):
    context = {'myVar': 42}
    render(request, 'htmlTemplate.html', context)

#myApp/templatetags/myTags.py
from django import template

myJsView(request, myVar):
    jsContext = {'myVar': myVar}
    return jsContext

register = template.Library()
register.inclusion_tag('jsTemplate.js', takes_context=True)(myJsView)

#htmlTemplate.html
#some html here...
<script type="text/javascript">{% myJsTag myVar %}</script>
#and the rest of the page...

#jsTemplate.js
#some javascript here for rendering the graph, which uses {{ myVar }}...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM