Как сопоставить URL с представлениями в django?

Гол:

127.0.0.1:8000/about

Должен дать:

добро пожаловать на страницу о нас

127.0.0.1:8000/contact

Должен дать:

добро пожаловать на страницу контактов

Проблема:

Оба выдают "страница не найдена по адресу /"

Эта ошибка:

https://imgur.com/a/P0uWhWl

Вот моя структура папок:

https://imgur.com/a/84uc5Pw

Это urls.py моего основного проекта "taskmate":

from django.contrib import admin

from django.urls import path, include



urlpatterns = [

    path('admin/', admin.site.urls),

    path('task/',include('todolist_app.urls')),

    path('todolist/',include('todolist_app.urls')),        

       
    ]

Для todolist_app, вот мои данные:

Urls.py:

from django.urls import path

from todolist_app import views

#from . import views    



urlpatterns = [

    path('', views.todolist),

    path('contact', views.contact,name='contact'),

    path('about', views.about, name="about"), #the path can be anything.

]

Views.py:

from django.shortcuts import render

from django.http import HttpResponse



# Create your views here.

def todolist(request):

    context={'welcome_text':"welcome to todo list app"}

    return render(request, 'html/todolist.html',context)



def contact(request):

    context={'welcome_text':"welcome to contact page"}

    return render(request, 'html/contact.html',context)



def about(request):

    context={'welcome_text':"welcome to to about us page"}

    return render(request, 'html/about.html',context)

Я подозреваю, что проблема в моем основном проекте urls.py, поскольку я не включил туда никаких подробностей о контактах и об URL. Поэтому я сделал там следующее.

from django.contrib import admin

from django.urls import path, include



urlpatterns = [   


    path('admin/', admin.site.urls),

    path('task/',include('todolist_app.urls')),

    path('todolist/',include('todolist_app.urls')),

    path('about/',include('todolist_app.urls')), 




    

]

Сайт работает, но цель не достигнута. Это очевидно, потому что about/ отображается на тот же URL, что и todolist/

Он показывает, что URL

http://127.0.0.1:8000/task/

И

http://127.0.0.1:8000/todolist/

показывали вместо того, что должны были показывать.

Теперь, я думаю, мне нужно исправить todolist_app urls.py

from django.urls import path

from todolist_app import views

#from . import views





urlpatterns = [

    path('', views.todolist),

    path('contact', views.contact,name='contact'),

    path('about', views.about, name="about"), #the path can be anything.

]

Я не уверен, как это исправить. Первое, что я не понимаю, это

    path('', views.todolist),

должно означать, что любой url 127.0.0.1:8000/ должен давать "welcome to todolist app", но только 127.0.0.1:8000/todolist дает его.

А отображение представлений для "contact" и "about" явно не работает.

Как исправить эту проблему?

Итак, чтобы достичь вашей цели, мы должны изменить url-файл проекта следующим образом:

    path('admin/', admin.site.urls),

    path('task/',include('todolist_app.urls')),

    path('',include('todolist_app.urls')), # change as this

Тогда вы можете получить

127.0.0.1:8000/about показывает "welcome to about page"

127.0.0.1:8000/contact показывает "welcome to contact page"

127.0.0.1:8000/ показывает "welcome to todolist app page"

Проблема заключалась в том, что в url файле проекта, когда вы добавляете path('todolist/',include('todolist_app.urls')), каждый url в приложении todolist будет иметь префикс с данной строкой в url файле проекта.

Для получения дополнительной информации вы можете обратиться к Django - URL Mapping.

Добавьте косую черту после вашего маршрута:

from django.urls import path

from todolist_app import views

urlpatterns = [

    path('', views.todolist),

    path('contact/', views.contact,name='contact'),

    path('about/', views.about, name='about'), #the path can be anything.

]
Вернуться на верх