我是Django的新手,我无法理解网址模式。当用户访问我的网站(http://www.example.com)的索引页面时,他们可以进行搜索。他们在一个框中输入名字,在另一个框中输入姓氏,然后单击搜索按钮。用户的搜索返回结果页面上的信息(http://www.example.com/results)。当我使用以下模式时,一切都很完美:
urlpatterns = patterns('',
...
url(r'^results',views.results, name='results'),
...
)
但是,我不会为每次搜索重新发送'/ results'网址,而是如何呈现捕获实际查询的此类网址:
http://www.example.com/results/<first_name>'+'<last_name>/
'first_name'和'last_name'是存储在视图中的request.session []变量。我确信这是一个非常简单的问题,但鉴于我是所有这一切的新手,我希望有人能帮助我理解这是如何工作的。
我很感激帮助。
答案 0 :(得分:0)
通过在网址模式中命名组。当然,如果你只是连接first_name和last_name,这很复杂,因为那样你就不知道如何区分哪个是谁。您应该像这样first_name+"/"+last_name
连接,然后您的网址格式应如下所示:
url(r'^results/(?P<first_name>[\w-]+)/(?P<last_name>[\w-]+)$',views.results, name='results'),
然后,您的结果视图应该接受两个参数:
def results(request, first_name, last_name):
希望你熟悉正则表达式。并且,如果first_name和last_name不正确(即无效,奇数值等),则需要控制自己。
答案 1 :(得分:0)
感谢您的所有建议!正则表达式非常强大;我需要花费几周的时间来更密切地学习它。使用您的建议,我能够使用以下内容使其工作:
urls.py
url(r'^results/(?P<first_name>\w)+(?P<last_name>\w)',views.results, name='results')
...
views.py
def search(request):
...
return HttpResponseRedirect('results/' + first_name + '+' + last_name)
def results(request,first_name,last_name):
...
再次感谢!