@SergiusGei

Как правильно собирается url django1.10?

urlpatterns-это список из url(), поэтому собирается так:

urlpatterns = [
url(...),
url(...),
]
.
вопрос 1. Как же собирается url()?Например
urlpatterns = [
url(r'^articles/([0-9]{4})/$', 'year_archive'),
url(r'^articles/([0-9]{4})/([0-9]{2})/$', 'month_archive'),
url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', 'article_detail'),
]
В этом примере articles-имя директории или файла? может ли быть имя директории или документа модулем?
мне совсем не понятно
  • Вопрос задан
  • 134 просмотра
Решения вопроса 1
darqsat
@darqsat
PM
Лучше конечно перейти на 2.0, там более не нужно использовать регулярки для фильтрации значений в урле. Выглидят секасно:
path('user/<int:id>/albums/<int:album_id>', views.list_albums, name="list_albums")

В принципе в 1.10 тоже самое только то что и вырезается при помощи регулярных выражений.

Логика работы диспатчера примерно следующая:
1. Веб сервер получает урл на который перешели (напр. 127.0.0.1:800/user/4/albums/12);
2. Веб сервер вызывает функцию url_dispatcher и передает аргументом путь без айпи адресса;
3. Диспатчер начинает идти циклом по твоему словарю url_patterns сверху вниз, и применять фильтр пока тот не будет True. Фильтр это то что идет первое, в твоем случае в 1.10 это регулярное выражение. И когда оно True, то происходит вызов функции view.NAME и передача в неё параметров из регулярки в виде аргументов.
4. Вью получает аргументы и обьект request и далее по логике вещей, собирает ответ, достает темплейт и кладет туда контекст в виде словаря
5. Ты уже в темплейте можешь гонять словарь циклом или напрямую упоминая его через {{ name }}

P.S. то что в урле указано как name="list_albums' нужно для формирования ссылки на темплейте при помощи функции {% url 'list_albums' %}. Ты на темплейте можешь вставить ссылку вызвав её по имени которое ты вписал в name. Они рекомендуют это использовать что бы не формировать ссылку руками, так как в случае изменения урла тебе надо пройти по всем темплейтам и все везде поменять.

И я хочу добавить что в джанго я сам нубас, и пока я не начал читать документацию я тоже как ты гуглил и искал ответы. Это очень не эффективно для развития. Лучше следовать гайду и понимать почему оно так работает. Например, мне понравился гайд на djangogirls, но щас с выходом 2.0 он устарел и в документации по 2.0 есть неплохой Tutorial хотя и не полный. Там непонятно что делать с авторизацией.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы