我是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/
和类似。
有什么办法吗?
2条答案
按热度按时间lf5gs5x21#
proyect/urls应该看起来像这样:
就是这样,不需要为每个URL都这样做。
u5rb5r592#
向url发出请求可以很好地工作,因为在请求的时刻,urlpatterns被一个接一个地匹配,解析器会首先找到模式中的第二行并使用它。
但是如果你使用带有名字的url标签,那么名字(!)匹配。
为了在服务器启动时做到这一点,逐个条目地扫描URL模式。
如果您为视图定义了名称,那么如果名称出现两个,则最后一个将保留。这就是您的案例中发生的情况,因为您多次包含signin/urls.py。
在您的情况下,
path('business_signup/', include('signin.urls'))
是最后一个。因此,{% url 'signup' %}
将转换为../business_signup/signup/
如果你离开
一切都会好起来的
顺便说一下,将/home/集成到基本URL中而不是singin URL中会更符合逻辑: