2012-09-01 77 views
1

如何在Django中「記住」表格選擇值?還記得表格選擇

{% load i18n %} 
<form action="." method="GET" name="perpage" > 
<select name="perpage"> 
    {% for choice in choices %} 
    <option value="{{choice}}" {% if 'choice' == choice %} selected="selected" {% endif %}> 
     {% if choice == 0 %}{% trans "All" %}{% else %}{{choice}}{% endif %}</option> 
    {% endfor %} 
</select> 
<input type="submit" value="{% trans 'Select' %}" /> 
</form> 
+1

請註明您的代碼的相關部分在這裏。我們不想跟隨一個鏈接(這可能會變得無效)來找出你的代碼是什麼或找出它的大部分是不相關的。 – Ryan

+0

好吧,當然!你知道,第五行必須是什麼? –

+0

這完全取決於你如何處理這種形式。上下文是否包含所選擇的選項以匹配此選項?你問是否可以默認最後選擇的選擇?因爲這個表單似乎沒有任何驗證。 –

回答

0
@register.inclusion_tag('pagination/perpageselect.html', takes_context='True') 
def perpageselect (context, *args): 
    """ 
    Reads the arguments to the perpageselect tag and formats them correctly. 
    """ 
    try: 
     choices = [int(x) for x in args] 
     perpage = int(context['request'].perpage) 
     return {'choices': choices, 'perpage': perpage} 
    except(TypeError, ValueError): 
     raise template.TemplateSyntaxError(u'Got %s, but expected integer.' % args) 

我剛添加takes_context='True'並採取從上下文值。模板編輯我作爲

{% load i18n %} 
<form action="." method="GET" name="perpage" > 
<select name="perpage"> 
    {% for choice in choices %} 
    <option value="{{choice}}" {% if perpage = choice %} selected="selected" {% endif%}> 
     {% if choice == 0 %}{% trans "All" %}{% else %}{{choice}}{% endif %}</option> 
    {% endfor %} 
</select> 
<input type="submit" value="{% trans 'Select' %}" /> 
</form> 
2

對不起我的話,但這似乎是一個不好的方法。 Django的方式來處理這是一個簡單的form with a initial value您選擇的選擇。如果你不敢相信我,你這樣堅持,那麼改變你的template if爲:

{% if choice == myInitChoice %} 

不要忘了送myInitChoice上下文。

c = RequestContext(request, { 
    'myInitChoice': request.session.get('yourInitValue', None), 
}) 
return HttpResponse(t.render(c)) 
+0

感謝您的建議:它將我推向了正確的解決方案! –

+1

hi @yakudza_m,還有另外一種方式表示感謝,有一天你會發現它。 – danihp

0

一般來說,當你遇到一個共同的任務,很可能有一個簡單的方法來做到這在Django。

from django import forms 
from django.shortcuts import render, redirect 

FIELD_CHOICES=((5,"Five"),(10,"Ten"),(20,"20")) 

class MyForm(froms.Form): 
    perpage = forms.ChoiceField(choices=FIELD_CHOICES) 


def show_form(request): 
    if request.method == 'POST': 
     form = MyForm(request.POST) 
     if form.is_valid(): 
      return redirect('/thank-you') 
      else: 
       return render(request,'form.html',{'form':form}) 
     else: 
      form = MyForm() 
      return render(request,'form.html',{'form':form}) 

在模板:

{% if form.errors %} 
    {{ form.errors }} 
{% endif %} 

<form method="POST" action="."> 
    {% csrf_token %} 
    {{ form }} 
    <input type="submit" /> 
</form> 
+0

謝謝!這也很好 –