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>
您正在为 test1
和 test2
使用相同的模板
首先创建 2 个模板 test1
和 test2
测试 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'
我创建了 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>
您正在为 test1
和 test2
首先创建 2 个模板 test1
和 test2
测试 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'