Django同时将视图中的var传递给两个模板
Posted
技术标签:
【中文标题】Django同时将视图中的var传递给两个模板【英文标题】:Django pass var from view to two template in the same time 【发布时间】:2013-02-09 03:16:00 【问题描述】:我想同时将 var 从视图传递到模板和 javascript 库 (javascript.js)。有可能吗?
view.py:
def setAppOptions(request, map_name):
if request.user.is_authenticated():
app_selected = EzApp.objects.get(app_name=app_name, created_by=request.user)
formset = ezAppOptionFormSet(user=request.user, instance=app_selected)
if request.method == 'POST':
formset = ezAppOptionFormSet(request.POST, instance=app_selected, user=request.user)
if formset.is_valid():
formset.save()
return render_to_response("manage_app_options.html", 'formset': formset, context_instance=RequestContext(request))
else:
error_msg = u"You are not logged in"
return HttpResponseServerError(error_msg)
模板:
% extends "basemap.html" %
% block library %
#I want to pass var to this library and to this template in the same time...
<script type="text/javascript" src="/static/javascript.js"></script>
% endblock %
% block content %
<table border="1">
<tr>
<td>
<h1>Define App options</h1>
% if formset.errors %
<p style="color: red;">
Please correct the error formset.errors|pluralize below.
</p>
% endif %
<form method="post" action="" encrypt="multipart/form-data">% csrf_token %
formset.as_p
<input type="submit" value="Submit" onclick="initialize()">
</form>
</td>
</tr>
</table>
% endblock %
【问题讨论】:
你是什么意思'将它传递给你的javascript库'?如果变量在您的 html 中,它肯定可用于您的 javascript.js 文件吗?你为什么不告诉我们你的变量是什么,以及你想用它做什么(在 html 和 javascript 中)。 【参考方案1】:假设您只想保留您的 javascript 文件 js,实现此目的的一种方法是让您的 js initialize
接受一些配置数据。在您的 html 模板中(由 django 呈现,因此可以访问您传递数据的上下文变量
javascript.js
...
function initialize(options)
...
模板.html
<input type="submit" value="Submit" onclick="initialize(
myvar: value_from_django ,
other_stuff: 10
)">
【讨论】:
这个解决方案有效,但我是否必须假设它不可能在模板中使用 django 标签和从单个视图中使用 javascript.js? 除非您将 javascript.js 文件直接包含在模板中。 % include "static/javascript.js %。这样你就可以维护单独的文件了。【参考方案2】:您不需要将变量“传递”到库。
只需像这样在脚本标签中设置它:
% block library %
<script type="text/javascript">
var foo = " variable ";
</script>
<script type="text/javascript" src="/static/javascript.js"></script>
% endblock %
然后您可以在 JS 中将其引用为 VARIABLE
或 window.foo
。
【讨论】:
以上是关于Django同时将视图中的var传递给两个模板的主要内容,如果未能解决你的问题,请参考以下文章