[英]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_tag
: https : //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.