Django将参数传递给链接的.js脚本模板

时间:2014-04-07 02:31:04

标签: javascript python django highcharts

我使用highcharts呈现一些图表。每个图形都使用一个javascript块定义。我不是特别想为每个.html模板重复相同的代码,该模板呈现带有图形的页面,所以我在考虑使用highcharts代码编写.js模板并使用以下行加载:

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

所以基本流程是:浏览到某个URL&gt; urls.py调用myHtmlView()&gt;渲染html模板&gt;调用外部.js脚本&gt; urls.py调用myJsView()&gt;渲染一个js模板&gt;某个网页上会显示一个图表。

但是,我有很多参数可以提供给呈现这个.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 }}...

1 个答案:

答案 0 :(得分:0)

回答我自己的问题。最好的方法是使用自定义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 }}...