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

问题描述 投票:0回答:2

我是 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/
和类似的。

任何解决方案?

python html django url
2个回答
0
投票

proyect/urls 应该是这个样子:

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

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

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


0
投票

向 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/
]

一切都会好的

© www.soinside.com 2019 - 2024. All rights reserved.