如何解决Django url正则表达式
| 我正在尝试使用具有以下结构的Django定义搜索网址www.example.com/afdata/search?device=television&category=news&query=channel&limit=30/
我的目标是从上述网址中提取值television
,news
,channel
和30
并将其传递给如下定义的视图
def search(request,device=\'all\',category=\'single\',query=\'\',limit=30):
return HttpResponse(\"device=%s,category=%s,query=%s,limit=%d\",device,category,query,limit)
afdata
是应用程序,在url配置文件中,我将url定义如下:
from django.conf.urls.defaults import *
urlpatterns = patterns(\'afdata.views\',(r\'^$\',\'index\'),(r\'^search?device=(?P<device>.*)&category=(?P<category>.*)&query=(?P<query>.*)&limit=(?P<limit>d+)/$\',\'search\')
)
当我在浏览器中使用上述搜索查询运行时,得到500 Internal Server Error
。 index
反应很好。关于我可能做错了什么建议?
解决方法
我建议您将搜索网址更改为:
(r\'^search\',\'search\')
然后在您看来
def search(request):
device = request.GET.get(\'device\',\'all\')
category = request.GET.get(\'category\',\'single\')
query = request.GET.get(\'query\',\'\')
limit = request.GET.get(\'limit\',30)
return HttpResponse(\"device=%s,category=%s,query=%s,limit=%d\",device,category,query,limit)
这更加健壮,可变且灵活。
, Django \的URL模式与URL的查询部分(以ѭ12开头的部分)不匹配。仅当您在URL结构本身中嵌入参数时,才可以尝试执行操作。
有关详细信息,请参见Django文档。
因此,如果您的网址是:
www.example.com/afdata/search/device/television/category/news/query/channel/limit/30/
然后,您将其与以下网址格式匹配:
urlpatterns = patterns(\'afdata.views\',(r\'^$\',\'index\'),(r\'^search/device/(?P<device>.*)/category/(?P<category>.*)/query/(?P<query>.*)/limit/(?P<limit>d+)/$\',\'search\')
)
(这是一个有点奇怪的URL约定,但是可以使用。)
如果您的网址中有查询,则只匹配?
之前的部分,然后您的视图就需要解析request.GET
中的参数。 (如果您的示例中已经具有类似的功能,那么编写一些粘合代码来传递参数就足够了。)
, 在您的Apache日志中查找stacktrace。还:您确定在search()的第二行上不是HTTPResponse不是HTTPRequest吗?
, 通过使用.*
,Django可能会抓住您的&category
。即使不是这种情况,通常最好的做法是以不允许这种方式构造正则表达式。我会考虑将您的.*
更改为[^&]*
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。