2016-06-04 13 views
0

В настоящее время я просматриваю различные учебники Django, чтобы понять, как работает отображение URL. Я наткнулся на пример, который является чем-то вроде этогоНе могу понять, почему это URL-адрес работает?

это в моем urls.py

url(r'admin_page_edit$',"adminApp.views.showClientDetails",name="admin_page_edit"), 

это в моем HTML-страницу, которая отображается в данный момент пользователю

<a href="{% url "admin_page_edit" %}?uname=SomeVal&par2=value" > 

сейчас URL, отображаемый браузером при щелчке по ссылке выше href. Нет проблем там

http://127.0.0.1:8000/admin_page_edit?uname=SomeVal&par2=value 

И выше URL земли в соответствующем представлении

adminApp.views.showClientDetails 

Теперь здесь не является proble, это, кажется, все работы, но я запутался, почему это работает? поскольку URL в браузере

http://127.0.0.1:8000/admin_page_edit?uname=SomeVal&par2=value 

который не соответствует строке регулярного выражения в URL

admin_page_edit$ 

(выше регулярное выражение означает, что если строка заканчивается admin_page_edit), но строка URL не заканчивается с admin_page_edit вместо этого

http://127.0.0.1:8000/admin_page_edit?uname=SomeVal&par2=value 

, таким образом, заканчивая par2=value

Мой вопрос: почему это попадает в соответствующее определение в представлении, когда регулярное выражение URL не совпадает?

+0

The? обычно означает, что последующие будут значениями. Страница заканчивается до? и что следует за значениями, которые будут отправлены методу POST для этой страницы. – AK47

+0

Отображение сопоставляет путь к URL-адресу, который в вашем случае является '/ admin_page_edit', который соответствует. Часть URL-адреса '? ...' - это [запрос] (https://en.wikipedia.org/wiki/Uniform_Resource_Identifier#Syntax) (** не ** данные POST-файла). –

ответ

2

Строки запроса (части, следующие за ?), не обрабатываются парсером URL-адреса Django. Зачем? Потому что их не нужно обрабатывать. Вы можете просто добавить любую строку запроса к любому URL-адресу:

Нравится: https://www.facebook.com/?request=pleasedonotwork который работает все равно. Если переадресации (или некоторые протоколы) выполняются на основе запросов, отправленных в URL-адресах, вы можете рассмотреть часть запроса URL-адресов как пассивный.

Эти строки запроса могут быть доступны в ваших представлениях через request.GETQueryDict