Django 1.11:模板中的 URL 函数未按预期工作
Posted
技术标签:
【中文标题】Django 1.11:模板中的 URL 函数未按预期工作【英文标题】:Django 1.11: URL function in template not working as expected 【发布时间】:2019-11-13 23:02:39 【问题描述】:我创建了 2 个测试应用程序 test1 和 test2,并在视图中添加了相同的功能,并在 url 文件中添加了相同的条目。问题是您访问哪个应用程序并不重要,相同的链接 appname/link 显示为 href。
不管我访问http://127.0.0.1:8000/test1还是http://127.0.0.1/test2,链接总是“Test Link”
使用语法 url 'appname:link' 确实有效,并且向 html 模板发送一个额外的参数以使用应用程序名称确实有效,但是如何仅使用 url 'link' 来解决它
项目网址:
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')),
]
test1 网址:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'testapp/', views.testapp, name='testapp'),
]
test2 网址:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'testapp/', views.testapp, name='testapp'),
]
test1 浏览量:
from django.shortcuts import render
def index(request):
return render(request, 'testme.html')
def testapp(request):
return render(request, 'testme.html')
test2 视图:
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'?
【问题讨论】:
【参考方案1】:您有 2 个名为 testapp 的网址。
将 test2 网址更改为(或提供应用名称)
urlpatterns = [
url(r'^$', views.index, name='index2'),
url(r'testapp/', views.testapp, name='testapp2'),
]
另外,在模板中添加引号
<a href ="% url 'testapp' %">Test Link</a>
【讨论】:
按照建议更改了代码,但仍然是同样的问题。 那我误解了你想要达到的目标。我重读了您的帖子,无法确定您的目标【参考方案2】:test1
和 test2
使用相同的模板
首先创建2个模板test1
和test2
test1 views.py
def index(request):
return render(request,'test1.html')
test1 urls.py
url(r'^$',views.index, name='test1'),
test1 模板test1.html
<a href = % url 'test1' %>Test 1 Link</a>
test2views.py
def index(request):
return render(request, 'test2.html')
test2urls.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'))
【讨论】:
【参考方案3】:通过使用中间件让它工作,目标是使用多个应用程序和 1 个模板。
类获取名称(对象): 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 链接更改为以下内容: href='/request.view_app_name/register'
【讨论】:
以上是关于Django 1.11:模板中的 URL 函数未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章
Django 1.11 如何从保存在 CMS 站点模型中的 HTML 中显示模板变量