繁体   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