Перекрытие URL в Django (два приложения в одном проекте Django)
Я делаю свой учебный проект, который называется GuitarStore. В этом проекте у меня есть два приложения - магазин и блог. Вот вымышленная ситуация: У меня есть страница "контакты" для моей команды авторов, и другая страница "контакты" для моей команды продавцов
Вот кусок моего guitarstore/urls.py:
urlpatterns = [
path('admin/', admin.site.urls),
path('shop/', include('shop.urls')),
path('blog/', include('blog.urls')),
path('', RedirectView.as_view(url='/shop/', permanent=True)),
]
часть shop/urls.py:
path('', views.shop, name='shop'),
re_path(r'^section/(?P<id>\d+)$', views.section, name='section'),
re_path(r'^product/(?P<pk>\d+)$', views.ProductDetailView.as_view(), name='product'),
re_path(r'^manufacturer/(?P<id>\d+)$', views.manufacturer, name='manufacturer'),
path('delivery', views.delivery, name='delivery'),
path('contacts', views.contacts, name='contacts'),
path('search', views.search, name='search'),
и фрагмент blog/urls.py:
path('', views.blog, name='blog'),
re_path(r'^blog/(?P<month_n_year>\w{7})$', views.blog_filtered, name='blog'),
re_path(r'^post/(?P<pk>\d+)$', views.PostDetailView.as_view(), name='post'),
path('gallery', views.gallery, name='gallery'),
path('about', views.about, name='about'),
path('contacts', views.contacts, name='contacts'),
path('search', views.search, name='search'),
Я думал, что Django придумает два отдельных пути типа "shop/contacts" и "blog/contacts", но нет. У меня есть такой кусок html шаблона:
<div class="top-nav">
<ul class="cl-effect-1">
<li><a href="{% url 'gallery' %}">Main</a></li>
<li><a href="{% url 'about' %}">Abour us</a></li>
<li><a href="{% url 'blog' %}">Blog</a></li>
<li><a href="{% url 'contacts' %}">Contacts</a></li>
</ul>
</div>
и все, что я получаю, это "shop/contacts" для последней части меню. Должен ли я убедиться, что все мои урлы имеют некоторый избыток, чтобы я не мог их перекрыть, или я просто должен сделать некоторые настройки, чтобы мои приложения имели некоторые приоритеты для своих собственных путей?
На данный момент я пробовал называть их по-разному, хотя мне кажется, что это не так, как должно быть. Например, у меня был файл шаблона "index.html" в папке шаблонов приложения shop и еще один файл шаблона под названием "index.html" в папке шаблонов приложения blog. Мой проект вышел из себя, поэтому я переименовал их в "shop.html" и "blog.html", хотя я хочу сохранить их старое название.
Я обнаружил, что могу использовать {% url 'blog:contacts' %} вместо {% url 'contacts' %}, чтобы Django не запутался в том, какой url ему показывать и использовать. Но несмотря на то, что мой blog/views.py состоит
def contacts(request):
return render(request, 'bl_contacts.html')
(я переименовал "contacts.html" в "bl_contacts.html"), мой blog/urls.py состоит из:
app_name = 'blog'
urlpatterns = [
####....
path('contacts', views.contacts, name='contacts'),
и мой шаблон/bl_contacts.html теперь состоит из:
<div class="top-nav">
<ul class="cl-effect-1">
<li><a href="{% url 'blog:gallery' %}">Main</a></li>
<li><a href="{% url 'blog:about' %}">About us</a></li>
<li><a href="{% url 'blog:blog' %}">Blog</a></li>
<li><a href="{% url 'blog:contacts' %}">Contacts</a></li>
</ul>
</div>
У меня все еще есть страница shop/contacts, хотя мой браузер показывает путь blog/contacts.