Как исправить ссылку тега в django
в проекте django я использовал jinja в ссылках вместо стандартных url. однако jinja стал добавлять впереди url лишнее 'news'. прошу помочь исправить, т.к. в самой проблеме разобраться не смог, я пока что новичок.
код основного urls.py:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('main.urls')),
path('me', include('main.urls')),
path('news', include('main.urls'))
]
код urls.py(файл приложения, а не основной):
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name = 'about'),
path('me', views.me, name = 'profile'),
path('news', views.news, name = 'feed')
]
часть html кода шаблона:
<p id="name">EVILGAMER
<a href="{% url 'about' %}" style="margin-left: 70%;">главная</a> |
<a href="{% url 'feed' %}"> новости</a> |
<a href="{% url 'profile' %}"> личный кабинет</a>
</p>
на скриншоте видно, как к атрибуту href добавилось 'news', хотя такую ссылку я не указывал
таким образом
http://127.0.0.1:8000/
http://127.0.0.1:8000/me
http://127.0.0.1:8000/news
превратились в
http://127.0.0.1:8000/news
http://127.0.0.1:8000/newsme
http://127.0.0.1:8000/newsnews
Ответы (1 шт):
Вы проделываете одну и ту же работу дважды, когда в корневом файле urls указываете включение путей с теми же путями в другом файле urls.
Исправьте ваш код на следующий:
# корневой urls.py
from django.contrib import admin
from django.urls import path, include
from main.views import index, me, news
urlpatterns = [
path('admin/', admin.site.urls),
path('', index, name='about'),
path('me/', me, name='profile'),
path('news/', news, name='feed')
]
В этом случае, файл urls в приложении вам не понадобится. Можно сделать то же самое по другому:
# корневой urls.py
from django.contrib import admin
from django.urls import path, include
from main.views import index, me, news
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('main.urls')),
]
# urls.py приложения
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='about'),
path('me/', views.me, name='profile'),
path('news/', views.news, name='feed'),
]
Так будет более правильно. Позже, если вы будете расширять проект и создавать новые приложения, вы сможете просто подключать urls приложения в корневом диспетчере url, задавать namespace и другие параметры, сохраняя лаконичность вашего кода.
В вашем коде Django проходит по коду в корневом urls.py и, так как вы три раза подключаете один и тот же файл urls приложения, каждый раз заменяет пути на последний обнаруженный. Это как присвоить переменной значение и потом 2 раза его поменять. В последней строчке стоит путь news без окончания /, поэтому ссылки получают вид newsme.
Узнайте подробнее о том, как Django обрабатывает url, прочитав официальную документацию о диспетчере url
