可以使用模板表单进行搜索
Can make a Search with a template form work
我在所有搜索中都使用 crispy-forms,但在这个搜索中我需要使用模板表单,我不知道我的代码有什么问题,因为我在其他项目中有相同的代码运行正常,不知道是不是Django版本,目前我用的是1.8。我得到的错误是找不到页面 (404),我没有找到 url.Here 的代码希望你能帮助我。我在 url 中使用 q 和 param 但 none 有效。
urls.py
url(r'^search/(?P<param>\S+)$', permission_required('agenda.change_agenda', login_url='/no_access')(SearchContact.as_view()), name='searchcontact'),
template_form.html
<form class="well form-search" action="/search/" method="get">
<input type="text" class="input-medium search-query" name="param">
<button type="submit" class="btn">Search</button>
</form>
views.py
class SearchContact(ListView):
template_name = 'agenda_contacts.html'
def get_queryset(self):
query = self.request.GET.get('param')
return Agenda.objects.filter(name=param)
你的正则表达式
r'^search/(?P<param>\S+)$
匹配 url,如 /search/hello
或 /search/my-search
。
但是,您的搜索表单正在 GET
参数中发送搜索词,例如 /search/?param=hello
或 /search/?param=my-search
。
GET 参数未在 urls.py 中捕获。您可以在视图中使用 request.GET
访问它们,就像您已经在做的那样。
因此,您应该从正则表达式中删除 param
,并将 url 模式更改为以下内容。
url(r'^search/$', permission_required('agenda.change_agenda', login_url='/no_access')(SearchContact.as_view()), name='searchcontact'),
我在所有搜索中都使用 crispy-forms,但在这个搜索中我需要使用模板表单,我不知道我的代码有什么问题,因为我在其他项目中有相同的代码运行正常,不知道是不是Django版本,目前我用的是1.8。我得到的错误是找不到页面 (404),我没有找到 url.Here 的代码希望你能帮助我。我在 url 中使用 q 和 param 但 none 有效。
urls.py
url(r'^search/(?P<param>\S+)$', permission_required('agenda.change_agenda', login_url='/no_access')(SearchContact.as_view()), name='searchcontact'),
template_form.html
<form class="well form-search" action="/search/" method="get">
<input type="text" class="input-medium search-query" name="param">
<button type="submit" class="btn">Search</button>
</form>
views.py
class SearchContact(ListView):
template_name = 'agenda_contacts.html'
def get_queryset(self):
query = self.request.GET.get('param')
return Agenda.objects.filter(name=param)
你的正则表达式
r'^search/(?P<param>\S+)$
匹配 url,如 /search/hello
或 /search/my-search
。
但是,您的搜索表单正在 GET
参数中发送搜索词,例如 /search/?param=hello
或 /search/?param=my-search
。
GET 参数未在 urls.py 中捕获。您可以在视图中使用 request.GET
访问它们,就像您已经在做的那样。
因此,您应该从正则表达式中删除 param
,并将 url 模式更改为以下内容。
url(r'^search/$', permission_required('agenda.change_agenda', login_url='/no_access')(SearchContact.as_view()), name='searchcontact'),