Django 1.11:URL 模板中的函数未按预期工作

Django 1.11: URL function in template not working as expected

我创建了 2 个测试应用程序,test1 和 test2,并在视图中添加了相同的功能,在 url 文件中添加了相同的条目。问题是您访问哪个应用程序并不重要,相同的 link、appname/link 显示为 href。

访问http://127.0.0.1:8000/test1 or http://127.0.0.1/test2, the link will always be "Test Link无所谓

使用语法 url 'appname:link' 确实有效,并且向 html 模板发送额外参数以使用应用程序名称确实有效,但如何才能将其寻址到使用 url 'link'

项目 urls:

from django.conf.urls import include, url
from django.views import generic
from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^test1/', include('test1.urls')),
    url(r'^test2/', include('test2.urls')),
]

测试 1 url:

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'testapp/', views.testapp, name='testapp'),

]

测试2 url:

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'testapp/', views.testapp, name='testapp'),


]

测试 1 次浏览:

from django.shortcuts import render

def index(request):
    return render(request, 'testme.html')

def testapp(request):
    return render(request, 'testme.html') 

测试 2 次浏览:

from django.shortcuts import render

def index(request):
    return render(request, 'testme.html')

def testapp(request):
    return render(request, 'testme.html') 

testme.html:

<a href = {% url 'testapp' %}>Test Link</a> 

是否可以设置为仅使用 url 'linkname' 而不是使用 url 'appname:linkname'?

您有 2 个名为 testapp 的网址。

将 test2 网址更改为(或提供应用程序名称)

urlpatterns = [
    url(r'^$', views.index, name='index2'),
    url(r'testapp/', views.testapp, name='testapp2'),
]

此外,在您的模板中添加引号

<a href ="{% url 'testapp' %}">Test Link</a> 

您正在为 test1test2

使用相同的模板

首先创建 2 个模板 test1test2

测试 1 views.py

def index(request):
    return render(request,'test1.html')

测试 1 urls.py

url(r'^$',views.index, name='test1'),

test1 模板test1.html

<a href = {% url 'test1' %}>Test 1 Link</a>

测试2 views.py

def index(request):
    return render(request, 'test2.html')

测试2 urls.py

url(r'^$',views.index, name='test2'),

test2 模板test2.html

<a href = {% url 'test2' %}>Test 2 Link</a>

项目urls.py

path('test1/',include('test1.urls')),
path('test2/', include('test1.urls'))

通过使用中间件使其工作,目标是使用多个应用程序和 1 个模板。

class 获取名称(对象): def init(self, get_response): self.get_response = get_response

def __call__(self, request):
    return self.get_response(request)

def process_view(self, request, view_func, view_args, view_kwargs):
    request.view_full_name = ".".join((view_func.__module__, view_func.__name__))
    view_app_name_temp = request.view_full_name.split('.')
    request.view_app_name = view_app_name_temp[0]

在模板上,将 href link 更改为以下内容: href='/{{request.view_app_name}}/register'