如何从 URL 标签调用 Django 表单字段?

0 投票
1 回答
753 浏览
提问于 2025-04-18 02:07

我有一个表单,用来获取字段值并进行搜索。我的想法是通过 Django 的“漂亮”网址方式来调用模板:

mypage.com/search_results/hola

问题是我还不知道怎么把表单字段作为参数传递到网址模板里。

Forms.py
class SearchForm(forms.Form):
    place_display = forms.CharField(max_length=100, help_text='Donde Quieres Ir')

views.py
 def search_results(request,place):
 ..

urls.py
urlpatterns = patterns('',
    url(r'^search_results/(?P<place>\d+)/$', views.search_results, name='search_results'),
    ..

如果我在使用模板,我应该如何从网址标签调用呢:

<form class="form-horizontal" action="{% url 'search_results' %}" role="form" method="get">
    <div class="form-group">
        <div class="col-lg-5">
            <label>Lugar</label>
            {{ form.place_display|add_class:"form-control"}}
            {{ form.place_type }}
            {{ form.place_id }}
        </div>
    </div>

   <div class="controls form-inline">
    <div class="form-group">
        <div class="col-lg-2">
             <label>Entrada</label>
            {{ form.fromdate|add_class:"form-control"}}

        </div>
    </div>

    <div class="form-group">
        <div class="col-lg-2">
            <label>Salida</label>
            {{ form.todate|add_class:"form-control"}}
        </div>
    </div>
    </div>
<br />
<button type="submit" class="btn btn-default">Buscar</button>

我尝试了不同的方法:

action="{% url 'search_results' form.place_display %}"
action="{% url 'search_results' {{form.place_display}} %}"
action="{% url 'search_results' place=form.place_display %}"
etc,etc,etc

1 个回答

0

在表单中把 action='' 去掉,然后把重定向的操作放在你的视图里面;)

下面是你的 视图 可能的样子:

def search_results(request, place):

    if request.method == 'POST':
        place = request.POST.get('place_display','')
        # place_display is the parameter you want, 
        # And '' is the default value if place_display isn't found.


        ### The following return is the thing you want to do, but it is unnatural. 
        ### You can't have an HTML page for any query term a user may search.
        ### What does the 'place' query should actualy do for you?

        return render(request, 'search_results/place', {})

与其这样返回,不如你真正想做的是下面这个:

return render(request, 'search_results.html', {place: 'place'})

撰写回答