簡體   English   中英

帶有模板的Django動態頁面生成

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM