【问题标题】:Django redirect url parsed as a query string in firefoxDjango 重定向 url 在 Firefox 中解析为查询字符串
【发布时间】:2010-07-24 22:14:38
【问题描述】:

我正在尝试在 Django 中创建过滤后的常见问题解答页面。它按三个类别过滤,当有人点击根 URL 时,默认为所有三个类别的“全部”。来自 urls.py:

keywords = ('key1','key2','key3')
searchurl = r'^category1/(?P<%s>\w{1,50})/category2/(?P<%s>\w{1,50})/category3/(?P<%s>\w{1,50})/$' % keywords
searchall = dict(zip(keywords,['all']*len(keywords)))

urlpatterns = patterns('my.path.views',

    url(searchurl, 'faq', name='search_view'),
)

urlpatterns += patterns('django.views.generic.simple',
    url(r'^$', 'redirect_to', {'url': searchurl, 'kwargs': searchall}, name='default_search'),
)

这在我在 Safari 中的测试中一切正常。但是,当我在 Firefox 中尝试它时,导航到根 URL 会返回一个页面未找到错误。它已重定向到“root/^category1/(/”,就好像正则表达式已作为 URL 传递,第一个 ? 之后的所有内容都被解释为查询字符串。知道可能是什么原因造成的吗?

谢谢!

【问题讨论】:

    标签: django firefox django-urls


    【解决方案1】:

    在您的 url 模式 default_search 中,searchurl 应该是 url 字符串,而不是正则表达式。

    查看redirect_to 上的Django docs,看起来您可以使用从url 捕获的参数进行字符串替换。您无法在尝试时将 searchall kwargs 替换为正则表达式。以下应该有效:

    searchallurl = 'category1/all/category2/all/category3/all/'
    url(r'^$', 'redirect_to', {'url': searchallurl,}, name='default_search'),
    

    但是,如果我正确理解了您的 url 配置,您就不需要从根 url 重定向。 Insead,调用你的 faq 视图,searchall 作为可选字典:

    url(r'^$', 'faq', searchall, name='default_search')
    

    【讨论】:

    • 在这两个方面都正确。谢谢你的帮助,先生!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多