如何解开我项目中的Django URL?

lc8prwob  于 2023-05-08  发布在  Go
关注(0)|答案(2)|浏览(134)

我是Django的初学者。根据YouTube视频和django文档制作了一个项目和应用程序。
我做了一个HTML页面的登录,注册和业务注册分别。

项目/urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls), #website.com/admin/
    path('', include('signin.urls')), #website.com/
    path('home/', include('signin.urls')), #website.com/home/
    path('signin/', include('signin.urls')), #website.com/signin/
    path('signup/', include('signin.urls')), #website.com/signup/
    path('business_signup/', include('signin.urls')), #website.com/business_signup/
]

登录/urls.pywww.example.com

from django.urls import path
from . import views

urlpatterns = [
    path('', views.default, name='signin'), 
    path('home/', views.default, name='home'),
    path('signin/', views.default, name='signin'),
    path('signup/', views.signup, name='signup'),
    path('business_signup/', views.business_signup, name='business_signup'),
]

我已经为空路径,主页和登录重定向到登录页面。代码如下:

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def default(request):
    return render(request, "default.htm")

在html页面中:

<p>New here? <a href="/signup">Create an account</a></p>

所有的URL都可以工作,但问题是当我在HTML页面的href中使用{% url 'name' %}时,如

<p>New here? <a href="{% url 'signup' %}">Create an account</a></p>

所有重定向都更改为

http://127.0.0.1:8000/business_signup/signin/
http://127.0.0.1:8000/business_signup/signup/
http://127.0.0.1:8000/business_signup/business_signup/

我想重定向{% url 'name' %}http://127.0.0.1:8000/signin/和类似。
有什么办法吗?

lf5gs5x2

lf5gs5x21#

proyect/urls应该看起来像这样:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('signin.urls')),
]

就是这样,不需要为每个URL都这样做。

u5rb5r59

u5rb5r592#

向url发出请求可以很好地工作,因为在请求的时刻,urlpatterns被一个接一个地匹配,解析器会首先找到模式中的第二行并使用它。
但是如果你使用带有名字的url标签,那么名字(!)匹配。
为了在服务器启动时做到这一点,逐个条目地扫描URL模式。
如果您为视图定义了名称,那么如果名称出现两个,则最后一个将保留。这就是您的案例中发生的情况,因为您多次包含signin/urls.py。
在您的情况下,path('business_signup/', include('signin.urls'))是最后一个。因此,{% url 'signup' %}将转换为../business_signup/signup/

urlpatterns = [
    path('admin/', admin.site.urls), 
    path('', include('signin.urls')),   # this one is the first one to match if e.g. you make a request to /signin/ 
    path('home/', include('signin.urls')), 
    path('signin/', include('signin.urls')), 
    path('signup/', include('signin.urls')), 
    path('business_signup/', include('signin.urls')), # this one is the last one and therefore relevant for finally defining names
]

如果你离开

urlpatterns = [
    path('admin/', admin.site.urls), #website.com/admin/
    path('', include('signin.urls')), #website.com/
]

一切都会好起来的
顺便说一下,将/home/集成到基本URL中而不是singin URL中会更符合逻辑:

project/urls.py

urlpatterns = [
    path('admin/', admin.site.urls), #website.com/admin/
    path('', include('signin.urls')), 
    path('home/', views.default, name='home')

]

signin/urls.py

urlpatterns = [
    path('signin/', views.default, name='signin'),
    path('signup/', views.signup, name='signup'),
    path('business_signup/', views.business_signup, name='business_signup'),
]

相关问题