[英]Django dynamic page generation with templates
我想使用模板和內容塊生成頁面。 主頁會生成一堆復選框,以生成一些特定值的搜索查詢。
<div id="searchbar">
{% for foo in bar %}
<input type="checkbox" name="foovar" value={{foo.name}}{%if foo.name in p %}checked=checked{%endif%}>{{foo.name}}<br>
{%endfor%}
<input type="submit" value="Submit">
</div>
<div id="searchresult">
{% block content %}
{% endblock %}
值“ bar”是傳遞到模板的參數,包含所有特定值:
return render_to_response('testlink/foobar.html',{'bar':strings_from_database})
現在,在提交值后,它們將傳遞到我的視圖,發生了一些魔術,結果通過
return render(request,'extend/extend.html',{'result':result,'p':queried_values})
結果是結果,p包含查詢的值(在提交后保持復選框處於選中狀態)。
{% extends "testlink/foobar.html" %}
{% block content %}
<b>results:</b> <br>
{% for result in result %}
{{result.someattribute}}<br>
{% endfor %}
{% endblock %}
現在,我的問題是:復選框消失了,可能是因為再次執行了“ for foo in bar”循環。 有沒有一種方法可以避免這種情況發生,而無需將復選框硬編碼到我的模板中? 這可以工作(我只用了幾個復選框就做到了,但是用太多的searchvalues這樣做是沒有意思的。另外,我想避免額外的數據庫命中並再次傳遞參數。
我同意以上評論,使用表格幾乎總是一個更好的主意。 但是針對您的問題,如果沒有將bar
變量傳遞給模板,則不會執行解析復選框的循環。 您需要將bar
添加到上下文中的extend.html
:
return render(request,'extend/extend.html',
{'result':result,'p':queried_values, 'bar':strings_from_database})
您不是為了防止兩次訪問數據庫而這樣做嗎? 它是否已證明是運行起來非常昂貴的查詢?
除了設置緩存之外,您始終可以將所有復選框“名稱”與表單一起傳遞。 您可以添加隱藏的輸入,如下所示:
{% for foo in bar %}
<input type="checkbox" name="foovar" value="{{foo.name}}" {%if foo.name in p %}checked="checked"{%endif%}>{{foo.name}}<br>
<input type="hidden" name="foovar_all" value="{{foo.name}}" />
{%endfor%}
然后,您需要使用以下方式收集值:
bar = request.POST.getlist('foovar_all')
但是您需要重新考慮代碼,以便bar
變量僅在兩個視圖中都包含那些對象的名稱,看起來它是當前的對象列表。 同樣,真的有必要避免該查詢嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.