URL перенаправления Django анализируется как строка запроса в Firefox - PullRequest
1 голос
/ 25 июля 2010

Я пытаюсь создать отфильтрованную страницу часто задаваемых вопросов в 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-адреса, а все после первого? Интерпретировалось как строка запроса. *

Спасибо!

1 Ответ

1 голос
/ 25 июля 2010

В вашем шаблоне URL default_search, searchurl должна быть строкой URL, а не регулярным выражением.

Глядя на Django docs на redirect_to, похоже, что вы можете использовать подстановку строк из параметров, полученных из URL. Вы не можете подставить все регулярные выражения в регулярное выражение, как вы пытаетесь. Должно работать следующее:

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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...