Как передать object_id в общий вид object_detail в Django - PullRequest
2 голосов
/ 12 августа 2010

Я использую django.views.generic.list_detail.object_detail.

Согласно документации представление принимает переменную object_id. Для этого я добавил в свой urlconf следующее:

(r'^(?P<object_id>\d+)$', list_detail.object_detail, article_info),

Приведенная выше строка находится в отдельном urlconf, который включен в основной urlconf.

Если я оставлю символ «^» в начале шаблона, а затем попытаюсь перейти по адресу:

... /? Object_id = 1

Это не работает. Если я уберу символ «^», адрес:

... /? Object_id = 1

Все еще не работает. Однако, если я использую:

... / object_id = 1 (без знака вопроса)

Представление принимает переменную object_id и работает без проблем. У меня есть два вопроса по этому поводу.

Первое: можно ли использовать символ '^' во включенном urlconf, чтобы ограничить шаблон, чтобы он соответствовал только базовому шаблону URL плюс точная строка между ^ $ во включенном urlconf?

Второе: почему знак вопроса останавливает представление от получения переменной 'object_id'? Я думал, что? был использован для обозначения переменных GET в URL.

спасибо

Ответы [ 3 ]

3 голосов
/ 12 августа 2010

Сначала я займусь твоим вторым вопросом. Символ ? в этом контексте используется для обозначения именованной группы в регулярном выражении. Это пользовательское расширение регулярных выражений , предоставляемых Python . (См. howto для примеров)

Чтобы передать object_id, добавьте его к URL (в вашем случае). Например: ../foo/app/3, где 3 - это object_id.

.
2 голосов
/ 12 августа 2010

Этот urlconf указывает Django сопоставить URL вида .../1, .../123 с данным представлением (... является префиксом этого urlconf).(?P<object_id>\d+) указывает django назначить значение, захваченное \d+, переменной object_id.См. Также документацию Python по регулярным выражениям и документацию django по диспетчеру URL .

1 голос
/ 13 августа 2010

Во-первых, «r» перед строкой означает, что это регулярное выражение, а ^ означает начало строки, $ означает конец строки.в python, когда вы вводите (?P<'something>a_regular_expression) , python найдет ваше соответствующее выражение для a_regular_expression в этой строке и вернет его как переменную с именем: что-то.здесь \ d + означает числа, и он найдет число и передаст его функции, которую вы там назначили (article_info) по имени object_id.

секунда, вам не нужно беспокоиться о GET URL, вы просто устанавливаетеосновной url и django будут сами управлять переменными GET.например, если у вас есть (r'^/post/$, my_app.views.show_post) в ваших шаблонах URL и вы отправляете запрос get ../post/?id=10, django будет использовать вашу функцию my_app.views.show_post и вы можете получить доступ к переменным get в request.GET, здесь, если вы хотите получить id, выможете использовать это request.GET[id].

...