2010-08-12 1 views
2

Я использую django.views.generic.list_detail.object_detail.Как передать object_id в общий вид object_detail в Django

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

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

выше строка находится в отдельных привязках, который входит в основных привязках.

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

.../object_id = 1

Это не работает. Если удалить '^' персонажу адрес:

.../object_id = 1

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

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

Вида принимающего object_id переменного и работает без проблем. У меня есть два вопроса.

Во-первых: Может ли символ «^» в включенном urlconf использоваться для ограничения шаблона только в соответствии с шаблоном базового url плюс точная строка, содержащая a^$ в включенном urlconf?

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

благодаря

ответ

3

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

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

2

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

0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^