【问题标题】:Django3 :Unable to link html page in djangoDjango3:无法在 Django 中链接 html 页面
【发布时间】:2020-08-03 09:29:08
【问题描述】:

我以register 的身份创建了新应用,当尝试在 html 中链接时,点击链接后它不会重定向页面

项目的settings.py

INSTALLED_APPS = [
    'questions.apps.QuestionsConfig',
    'register.apps.RegisterConfig', # registered new app
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'crispy_forms',
]

项目的urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('questions.urls')),
    path('register/', include('register.urls')) #Linked apps urls.py
]

注册应用的views.py:

from django.shortcuts import render, redirect
from django.http import HttpResponse
from .forms import RegisterForm

# Create your views here.
def register(request):

    if request.method == "POST":
        form = RegisterForm(request.POST)
        if form.is_valid():
            form.save()
        return redirect("/")
    else:
        form = RegisterForm()
    return render(request,'register.html',{'form':form})
def test(request):
    return render(request,'test.html',{'form':form})

注册应用的urls.py:

from django.urls import path
from . import views

urlpatterns = [
    path('register', views.register, name='register'),
]

当我在浏览器的 url 中使用 http://127.0.0.1:8000/register/register 时,它工作正常。

在浏览器中输出:

但是当我在 html 中使用 href 标签来渲染 register.html 页面时,我得到了错误。

尝试后:

<a href="#link" class="btn btn-info"  href="register/register">Register</a>

我什么也没得到,在浏览器 url 中显示为

http://127.0.0.1:8000/#link

使用时:

<a href="#link" class="btn btn-info"  href="{% url 'register/register' %}">Register</a>

得到错误:

NoReverseMatch at /
Reverse for 'register/register' not found. 'register/register' is not a valid view function or pattern name.

【问题讨论】:

    标签: django django-views django-templates django-3.0


    【解决方案1】:

    因为{% url %} 需要一个视图名称。话虽如此,这条线会产生问题。

    所以替换这个:

    <a href="#link" class="btn btn-info"  href="{% url 'register/register' %}">Register</a>
    

    与:

    <a class="btn btn-info"  href="{% url 'register' %}">Register</a>
    

    【讨论】:

      【解决方案2】:

      您的锚标记中有两个href。您的动态网址也有错误。应该是这样的:

      <a class="btn btn-info"  href="{% url 'register:register' %}">Register</a>
      

      另外,在你的项目urls.py中,应该如下:

      path('register/', include('register.urls', namespace="register"))
      

      【讨论】:

      • 我是否需要导入一些东西才能在项目的urls.py 中使用命名空间,因为我收到TypeError: _path() got an unexpected keyword argument 'namespace' 的错误
      • 对不起,我犯了一个错误。 namespace 应该在 include 函数中。
      猜你喜欢
      • 2022-01-21
      • 1970-01-01
      • 2013-11-17
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 2021-08-13
      • 2012-12-09
      • 2014-10-23
      相关资源
      最近更新 更多