【问题标题】:Django pass var from view to two template in the same timeDjango同时将视图中的var传递给两个模板
【发布时间】: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 中)。

标签: javascript django django-templates django-views


【解决方案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 中将其引用为 VARIABLEwindow.foo

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 2014-09-11
    • 2013-02-09
    • 2013-07-29
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 2017-07-23
    • 1970-01-01
    相关资源
    最近更新 更多