#django #django-templates
#django #django-templates
Вопрос:
Не лучший заголовок.. в любом случае: у меня есть следующая запись URLconf:
url(r'^events(?:/(?:(?P<event_id>d )|(?P<new>new)))?/?
Который, как вы можете видеть, не может принимать никаких дополнительных компонентов пути после событий, или числа, или слова "новый". Моя проблема заключается в попытке выполнить обратный поиск с одной из двух групп захвата из шаблона. Django, похоже, не понимает, что если тегу URL-адреса шаблона задан один аргумент, все в порядке, поскольку в моем регулярном выражении указано, что это либо одна группа, либо другая.
Например, скажем, я хочу пойти на:
/events/1
Я пытаюсь сделать это следующим образом:
{% url 'social_network:events' event.id %}
И я получаю:
Reverse for 'events' with arguments '(1,)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['events(?:/(?:(?P<event_id>\d )|(?P<new>new)))?/?
Я также пытался с именованными параметрами (вместо event_id=1) передать параметры в словаре, но все та же ошибка. Имейте в виду, если я удалю одну из групп захвата ORed, тогда она разрешится просто отлично.
Есть мысли?
Ответ №1:
Django не может отменить URL-адреса с дополнительными группами захвата, потому что он не может знать, что туда поместить. Лучший способ справиться с этой ситуацией - иметь несколько записей в urlconf: одну для версии без параметров, одну с идентификатором и одну с new .
Вы все равно можете указать, что все они указывают на одно и то же представление - хотя я должен сказать, что, поскольку поведение явно отличается для этих трех случаев, ваш код, вероятно, был бы более понятным, если бы у вас было три отдельных представления.
Комментарии:
1. Есть идеи, почему он не сможет выполнить обратный поиск? если он идет слева направо, он должен соответствовать первой группе, в которую он должен вставить event.id (предполагая, что ожидание / возврат назад или жадность), а затем сопоставьте $.
2. Однако, если я использую 3 разных URL-адреса, как мне отличить их при обращении к ним? Должен ли я назначать им разные параметры "name"? Например, url (regex1, EventView.ASView(), name='events.list'), url (regex2, EventView.ASView(), name ='events.new') и т. Д.?
3. И на самом деле, похоже, он способен обрабатывать необязательные группы. Если я сделаю это:
url(r'^events(?:/(?P<event_id>d ))?/?$', EventView.as_view(), name='events')
, это работает просто отлично. И это именованная группа захвата внутри необязательной группы удаления. Может быть, вы имели в виду группы ORed? Но, тем не менее, для меня это не совсем имеет смысл.
, EventView.as_view(), name='events')
Который, как вы можете видеть, не может принимать никаких дополнительных компонентов пути после событий, или числа, или слова "новый". Моя проблема заключается в попытке выполнить обратный поиск с одной из двух групп захвата из шаблона. Django, похоже, не понимает, что если тегу URL-адреса шаблона задан один аргумент, все в порядке, поскольку в моем регулярном выражении указано, что это либо одна группа, либо другая.
Например, скажем, я хочу пойти на:
Я пытаюсь сделать это следующим образом:
И я получаю:
Я также пытался с именованными параметрами (вместо event_id=1) передать параметры в словаре, но все та же ошибка. Имейте в виду, если я удалю одну из групп захвата ORed, тогда она разрешится просто отлично.
Есть мысли?
Ответ №1:
Django не может отменить URL-адреса с дополнительными группами захвата, потому что он не может знать, что туда поместить. Лучший способ справиться с этой ситуацией - иметь несколько записей в urlconf: одну для версии без параметров, одну с идентификатором и одну с new .
Вы все равно можете указать, что все они указывают на одно и то же представление - хотя я должен сказать, что, поскольку поведение явно отличается для этих трех случаев, ваш код, вероятно, был бы более понятным, если бы у вас было три отдельных представления.
Комментарии:
1. Есть идеи, почему он не сможет выполнить обратный поиск? если он идет слева направо, он должен соответствовать первой группе, в которую он должен вставить event.id (предполагая, что ожидание / возврат назад или жадность), а затем сопоставьте $.
2. Однако, если я использую 3 разных URL-адреса, как мне отличить их при обращении к ним? Должен ли я назначать им разные параметры "name"? Например, url (regex1, EventView.ASView(), name='events.list'), url (regex2, EventView.ASView(), name ='events.new') и т. Д.?
3. И на самом деле, похоже, он способен обрабатывать необязательные группы. Если я сделаю это:
url(r'^events(?:/(?P<event_id>d ))?/?$', EventView.as_view(), name='events')
, это работает просто отлично. И это именованная группа захвата внутри необязательной группы удаления. Может быть, вы имели в виду группы ORed? Но, тем не менее, для меня это не совсем имеет смысл.
]
Я также пытался с именованными параметрами (вместо event_id=1) передать параметры в словаре, но все та же ошибка. Имейте в виду, если я удалю одну из групп захвата ORed, тогда она разрешится просто отлично.
Есть мысли?
Ответ №1:
Django не может отменить URL-адреса с дополнительными группами захвата, потому что он не может знать, что туда поместить. Лучший способ справиться с этой ситуацией — иметь несколько записей в urlconf: одну для версии без параметров, одну с идентификатором и одну с new .
Вы все равно можете указать, что все они указывают на одно и то же представление — хотя я должен сказать, что, поскольку поведение явно отличается для этих трех случаев, ваш код, вероятно, был бы более понятным, если бы у вас было три отдельных представления.
Комментарии:
1. Есть идеи, почему он не сможет выполнить обратный поиск? если он идет слева направо, он должен соответствовать первой группе, в которую он должен вставить event.id (предполагая, что ожидание / возврат назад или жадность), а затем сопоставьте $.
2. Однако, если я использую 3 разных URL-адреса, как мне отличить их при обращении к ним? Должен ли я назначать им разные параметры «name»? Например, url (regex1, EventView.ASView(), name=’events.list’), url (regex2, EventView.ASView(), name =’events.new’) и т. Д.?
3. И на самом деле, похоже, он способен обрабатывать необязательные группы. Если я сделаю это:
url(r'^events(?:/(?P<event_id>d ))?/?$', EventView.as_view(), name='events')
, это работает просто отлично. И это именованная группа захвата внутри необязательной группы удаления. Может быть, вы имели в виду группы ORed? Но, тем не менее, для меня это не совсем имеет смысл.
, EventView.as_view(), name=‘events’)
Который, как вы можете видеть, не может принимать никаких дополнительных компонентов пути после событий, или числа, или слова «новый». Моя проблема заключается в попытке выполнить обратный поиск с одной из двух групп захвата из шаблона. Django, похоже, не понимает, что если тегу URL-адреса шаблона задан один аргумент, все в порядке, поскольку в моем регулярном выражении указано, что это либо одна группа, либо другая.
Например, скажем, я хочу пойти на:
Я пытаюсь сделать это следующим образом:
И я получаю:
Я также пытался с именованными параметрами (вместо event_id=1) передать параметры в словаре, но все та же ошибка. Имейте в виду, если я удалю одну из групп захвата ORed, тогда она разрешится просто отлично.
Есть мысли?
Ответ №1:
Django не может отменить URL-адреса с дополнительными группами захвата, потому что он не может знать, что туда поместить. Лучший способ справиться с этой ситуацией — иметь несколько записей в urlconf: одну для версии без параметров, одну с идентификатором и одну с new .
Вы все равно можете указать, что все они указывают на одно и то же представление — хотя я должен сказать, что, поскольку поведение явно отличается для этих трех случаев, ваш код, вероятно, был бы более понятным, если бы у вас было три отдельных представления.
Комментарии:
1. Есть идеи, почему он не сможет выполнить обратный поиск? если он идет слева направо, он должен соответствовать первой группе, в которую он должен вставить event.id (предполагая, что ожидание / возврат назад или жадность), а затем сопоставьте $.
2. Однако, если я использую 3 разных URL-адреса, как мне отличить их при обращении к ним? Должен ли я назначать им разные параметры «name»? Например, url (regex1, EventView.ASView(), name=’events.list’), url (regex2, EventView.ASView(), name =’events.new’) и т. Д.?
3. И на самом деле, похоже, он способен обрабатывать необязательные группы. Если я сделаю это:
url(r'^events(?:/(?P<event_id>d ))?/?$', EventView.as_view(), name='events')
, это работает просто отлично. И это именованная группа захвата внутри необязательной группы удаления. Может быть, вы имели в виду группы ORed? Но, тем не менее, для меня это не совсем имеет смысл.