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

时间:2019-07-03 09:28:40

标签: django django-rest-framework django-templates django-views django-urls

我创建了2个测试应用程序test1和test2,并在视图和url文件中添加了相同的功能。问题在于您访问哪个应用程序都没有关系,相同的链接(应用程序名称/链接)显示为href。

是否访问http://127.0.0.1:8000/test1http://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'的设置吗?

3 个答案:

答案 0 :(得分:1)

您有2个URL,名称为testapp。

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

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

此外,在模板中添加引号

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

答案 1 :(得分:0)

您为test1test2使用相同的模板

首先创建2个模板test1test2

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>

test2 views.py

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

test2 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'))

答案 2 :(得分:0)

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

class getname(object):     def init (自己,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}} /注册'

相关问题