构建Django URL模式

时间:2014-07-03 13:21:46

标签: django url-pattern

我是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 []变量。我确信这是一个非常简单的问题,但鉴于我是所有这一切的新手,我希望有人能帮助我理解这是如何工作的。

我很感激帮助。

2 个答案:

答案 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):
...

再次感谢!