2013-02-23 48 views
1

我想在同一時間將var從視圖傳遞到模板和JavaScript庫(javascript.js)。可能嗎?Django在視圖中將var從同一時間傳遞到兩個模板

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 %} 
+0

你是什麼意思'傳遞給你的JavaScript庫'?如果這個變量在你的html文件中,那麼你的javascript.js文件就可以使用它了。你爲什麼不告訴我們你的變量是什麼,以及你想要做什麼(在html和javascript中)。 – 2013-02-23 16:06:37

回答

2

假設你要保持你的JavaScript文件JS只,實現這一目標的一種方式是讓你的JS initialize接受一些配置數據。在你的HTML模板(這是由Django的渲染,從而可以訪問您的上下文瓦爾你

javascript.js

... 
function initialize(options) { 
... 

template.html

<input type="submit" value="Submit" onclick="initialize({ 
    myvar: {{ value_from_django }}, 
    other_stuff: 10 
})"> 
+0

這個解決方案的工作原理,但我必須假設它不可能在模板中使用django標籤,並且從單個視圖中使用javascript.js? – 2013-02-24 18:01:08

+0

除非您直接在模板中包含javascript.js文件。 {%include「static/javascript.js%}。這可以讓你保持單獨的文件。 – 2013-02-25 10:00:04

0

你不通過數據。需要「傳遞」變量圖書館

設置它在腳本標籤,像這樣:

{% block library %} 
<script type="text/javascript"> 
    var foo = "{{ variable }}"; 
</script> 
<script type="text/javascript" src="/static/javascript.js"></script> 
{% endblock %} 

然後,您可以在您的JS內引用它作爲VARIABLEwindow.foo

相關問題