构造Django URL模式

构造Django URL模式,django,url-pattern,Django,Url Pattern,我是Django的新手,在理解URL模式方面有困难。当用户访问我的网站的索引页面时,他们有能力进行搜索。他们在一个框中输入名字,在另一个框中输入姓氏,然后单击搜索按钮。用户的搜索将返回结果页面上的信息。当我使用以下模式时,一切都非常完美: urlpatterns = patterns('', ... url(r'^results',views.results, name='results'), ... ) 但是,与每次搜索都呈现“/results”URL不同,我如何呈现这样一个捕获实际查询的U

我是Django的新手,在理解URL模式方面有困难。当用户访问我的网站的索引页面时,他们有能力进行搜索。他们在一个框中输入名字,在另一个框中输入姓氏,然后单击搜索按钮。用户的搜索将返回结果页面上的信息。当我使用以下模式时,一切都非常完美:

urlpatterns = patterns('',
...
url(r'^results',views.results, name='results'),
...
)
但是,与每次搜索都呈现“/results”URL不同,我如何呈现这样一个捕获实际查询的URL:

http://www.example.com/results/<first_name>'+'<last_name>/
“first_name”和“last_name”是存储在视图中的request.session[]变量。我确信这是一个非常简单的问题,但考虑到我对所有这些都不熟悉,我希望有人能帮助我理解这是如何工作的


我感谢你的帮助

在url模式中命名组。当然,如果你只是把名字和姓氏连在一起,这会很复杂,因为你不知道如何区分谁是谁。您应该像这个名字+/+姓氏那样连接,然后您的url模式应该像这样:

url(r'^results/(?P<first_name>[\w-]+)/(?P<last_name>[\w-]+)$',views.results, name='results'), 然后,结果视图应接受两个参数:

def resultsrequest,名字,姓氏:


希望您熟悉regexp。而且,如果名字和姓氏不正确,即无效、奇数值等,ofc您需要控制自己。

谢谢您的建议!正则表达式非常强大;我需要花几个星期的时间更仔细地学习。根据您的建议,我能够通过以下方式使其工作:

url.py

url(r'^results/(?P<first_name>\w)+(?P<last_name>\w)',views.results, name='results')
...

再次感谢

通常,搜索参数通过查询字符串传递:http://www.example.com/results/?first_name=john&last_name=doe 然后您可以使用request.GET在视图中访问它们。因此,无需指定其他url。当然,这是可行的。所以,我没有什么特殊的方法可以显示url的完整路径,而不仅仅是“/results”?我想这不是一个大问题,但视觉效果很好。如果始终提供名和姓,您可以将它们用作url参数urlr“^results/?P\w+/?P\w+”,views.results,name='results',我会收到一个错误,说我正在请求,并且没有url模式匹配。在这个解决方案中,我是否需要调整HttpResponse以请求相同的正则表达式?目前,我的模板位于'results.html',这是我在HttpResponse中请求的。这是因为您不必请求此url。您必须请求example.com/results/first\u name/last\u name。此请求将调用您的视图,并且您的视图将数据传递到模板以进行渲染。
def search(request):
...
return HttpResponseRedirect('results/' + first_name + '+' + last_name)

def results(request,first_name,last_name):
...