我是 django 的初学者。按照 YouTube 视频和 django 文档制作了一个项目和应用程序。
我制作了一个 HTML 页面,分别用于登录、注册和业务注册。
project/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.py
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>
所有网址都有效,但问题是当我在 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/
和类似的。
任何解决方案?
proyect/urls 应该是这个样子:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('signin.urls')),
]
就是这样,不需要为每个 URL 都这样做。
向 url 发出请求可以正常工作,因为在请求的那一刻,urlpatterns 是逐一匹配的,解析器将首先找到您的模式中的第二行并使用它。
但是如果你使用带有名称的 url 标签,那么 urlpatterns 的名称(!)是匹配的。
要在服务器启动时执行此操作,逐项扫描 urlpattern。
如果您为视图定义名称,那么如果名称出现重复,最后一个 将保留。这就是您的情况,因为您多次包含 signin/urls.py。
在你的情况下,
path('business_signup/', include('signin.urls'))
是最后一个。所以{% url 'signup' %}
会翻译成../business_signup/signup/
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/
]
如果你离开
urlpatterns = [
path('admin/', admin.site.urls), #website.com/admin/
path('', include('signin.urls')), #website.com/
]
一切都会好的