Django 1.11: функция URL в шаблоне не работает должным образом - PullRequest
0 голосов
/ 03 июля 2019

Я создал 2 тестовых приложения, test1 и test2, и добавил те же функции в представлениях и те же записи в файлах url.Проблема в том, что не имеет значения, к какому приложению вы обращаетесь, та же ссылка, имя приложения / ссылка, отображается как href.

Не имеет значения, если я получу доступ к http://127.0.0.1:8000/test1 или http://127.0.0.1/test2,, ссылка всегда будет " Test Link "

Использование синтаксиса URL'appname: link' работает, и отправка дополнительного параметра в шаблон html для использования имени приложения работает, но как его можно адресовать только для использования URL 'link'

URL проекта:

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')),
]

URL-адрес test1:

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

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

]

URL-адрес 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 ]

1 голос
/ 03 июля 2019

У вас есть 2 URL с именем testapp.

изменить URL-адреса test2 на (или указать имя приложения)

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

Кроме того, добавить кавычки в шаблон

<a href ="{% url 'testapp' %}">Test Link</a> 
0 голосов
/ 04 июля 2019

Работает с помощью промежуточного программного обеспечения, цель состояла в том, чтобы использовать несколько приложений и 1 шаблон.

класс getname (объект): 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}} / регистре' * +1008 *

0 голосов
/ 03 июля 2019

вы используете один и тот же шаблон для 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>

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