【问题标题】:Form-View Mapping Issue in DjangoDjango中的表单视图映射问题
【发布时间】:2014-07-27 23:29:03
【问题描述】:

这变得非常令人沮丧,就像我迄今为止所有的 Django 表单努力一样......

我有一个搜索栏表单,它应该将用户发送到一个 url '/project/search/<query>/',如果我输入一个 url 但我的表单没有正确映射,该 url 工作正常。我首先在搜索结果页面中实现这一点,它仍然有一个搜索栏,每当我在搜索栏中输入一个值时,我都会被重定向到“/project/search/”。我哪里出错了?我花了整整两天的时间都无济于事。

我真的很挣扎,我不知道我做错了什么。我希望我至少有一个错误或需要修复的东西,但这就是行不通。

这是我的表单类和视图:

    from django import forms

    class SearchForm(forms.Form):
        search_string = forms.CharField(initial='Search Article Text',max_length=100)

def search(request, search_query):  

form = SearchForm()
context = RequestContext(request)
search_string = search_query.replace('_',' ')
search_terms = search_query.split('_')
search_results = Article.objects.all()
for term in search_terms:
    search_results = search_results.filter(article__icontains=term)

context_dict = {
    'search_string':search_string,
    'search_results':search_results,
    'form':form,
    }


if request.method == 'POST':
    form = SearchForm(request.POST)
    context_dict['form'] = form
    if form.is_valid():
        search_string = form.cleaned_data['search_string']
        search_query = search_string.replace(' ','_')
        ###return HttpResponseRedirect(reverse('search', args=(search_query,)))
        search_url = '/project/search/' + search_query + '/'
        return HttpResponseRedirect(search_url)
return render_to_response('search.html', context_dict, context)

html:

<form action='/beacon/search/' class="navbar-form navbar-right" method='POST'>
              <div class="form-group">
                {% csrf_token %}
                {{ form.search_string }}
              </div>
              <input type='submit' value='Submit' class='btn btn-default'/>
            </form>

【问题讨论】:

    标签: python html django twitter-bootstrap python-3.x


    【解决方案1】:

    我不太明白你的问题。你被重定向了,因为这就是你告诉视图要做的事情:你明确地返回一个 HttpResponseRedirect。如果您不想重定向,请不要这样做。

    【讨论】:

    • 哦,我刚检查调试时忘记更改了。无论如何,按钮会将我重定向到 /project/search/ 而不是 /project/search/。我会按照最初的方式放置代码,但它仍然会导致重定向到 /project/search/
    【解决方案2】:

    好吧,经过大约 5 天的故障排除后,我意识到了我的问题所在(我还从 Django Users Google 小组获得了一点帮助)。

    我正在回答这个问题,以防将来有人也遇到我的问题。我显然不是 Django 表单部分的专家。

    这一切都与我的实际 HTML 文章有关。在我的表单标签中,操作是 '/project/search/' ,它只是将我重定向到该 URL,因为 django 认为 /project/search/ 与 project/search/query 不同。因此,我需要为此部分做的就是更改操作以引用任何可以验证我的搜索视图的 URL - 所以我选择了 /project/search/search_query/ 但 /project/search/ 之后的任何内容都可以工作。

    我的第二个问题是我的输入。我需要在我的输入中包含一个名称 -'search_string' - 这样我的搜索视图才能理解表单本身携带的值。

    因此我的 html 最终看起来像:

    <form action='/beacon/search/search_query/' class="navbar-form navbar-right" method='POST'>
                  <div class="form-group">
                    {% csrf_token %}
                    <input type="text" name='search_string' class="form-control" placeholder="Search Article Text"/>
                  </div>
                  <!--<button type="submit" class="btn btn-default" value='Submit'>Submit</button>-->
                  <input type='submit' value='Submit' class='btn btn-default'/>
                </form>
    

    感谢 Branko Majic 帮助我加入 Dj 用户组。认真的。

    【讨论】:

      猜你喜欢
      • 2017-10-02
      • 1970-01-01
      • 2011-07-28
      • 2013-06-07
      • 1970-01-01
      • 2011-10-04
      • 2020-04-18
      • 2016-03-01
      • 2021-09-06
      相关资源
      最近更新 更多