2015-01-06 5 views
0

У меня есть проект с приложением под названием экзамены. Сейчас моя индексная страница является индексной страницей одного из этих приложений. Так что шаблоны URL-то вроде этого:Использование имени для шаблонов шаблонов django в django

from django.conf.urls import patterns, include, url 

urlpatterns = patterns('', 
    url(r'^', include('exams.urls', namespace="exams")), 
) 

Однако вполне возможно, что в будущем я хочу, чтобы создать новое представление для моей индексной страницы и изменить шаблоны URL-то вроде этого:

from django.conf.urls import patterns, include, url 

urlpatterns = patterns('', 
    url(r'^exams/', include('exams.urls', namespace="exams")), 
    url(r'^/$', 'mysite.views.index', name="index"), 
) 

Я хочу создать некоторые ссылки в моем шаблоне, чтобы указать, загружает ли приложение экзаменов или другое представление. Поэтому я попытался использовать аргумент name для метода url (например, выше), но, похоже, он не работает. Когда я использую {% url 'index' %} в моем шаблоне возвращает следующее сообщение об ошибке:

Reverse for 'index' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: [] 

UPD: Я забыл упомянуть, что я пытался использовать следующий код:

from django.conf.urls import patterns, include, url 

urlpatterns = patterns('', 
    url(r'^', include('exams.urls', namespace="exams"), name="index"), 
) 

И я получил ошибку, которую я написал выше.

UPD2: Для выяснения вопроса больше: Прямо сейчас, когда я иду в http://mydomain/ я буду видеть мой индекс приложения. Но, возможно, в будущем мне нравится менять мою индексную страницу и использовать другое представление для ее создания. Поэтому, когда я перехожу на http://mydomain/, я увижу страницу, представленную этим представлением, и перейдя на http://mydomain/exams. Я увижу страницы индексов приложений. В этом случае мой urls.py будет sth, как второй код, который я написал выше, в котором я могу легко ссылаться на индексную страницу с помощью тега {% url 'index' %}. Однако на данный момент я использую код, который я написал в своем первом обновлении. Я хочу, чтобы мои шаблоны отображали {% url 'index' %} в качестве ссылки на мою индексную страницу (вместо использования {% url 'exams:index' %}, поэтому, когда я позже изменю код urls.py, мне не придется менять все мои шаблоны.

+0

взгляните на этот вопрос, это может помочь. http: // stackoverflow.com/questions/22473390/how-to-use-django-template-tag-url-with-django-1-6 – ancho

+0

Представляет ли ваш mysite.views.index второй аргумент, т. е. 'def index (request, other_arg) : '...? – Raphael

+0

@ Raphael: На самом деле у меня нет mysite.views.index прямо сейчас, но я планирую создать его. Но пока я не хочу, чтобы мой индекс был моей индексной страницей приложения. – Matrix

ответ

0

Если я хорошо понимаю, вы хотите, чтобы индексный вид можно было легко изменить, не изменяя ссылки, указывающие на него в ваших шаблонах. Вы можете использовать индексный просмотр, как обертка для других представлений, то есть:

def a_view_that_will_show_all_the_exams(request): 
    # this is the page displayed for now as default, but this could change 
    # some logic here 

def another_view_that_could_become_the_home_page(request): 
    # some logic here 

def index(request): 
    return a_view_that_will_show_all_the_exams(request) 
    # or another_view_that_could_become_the_home_page 
    # or return exams.views.whatever_view 

Таким образом, вы можете легко изменить результат индексных, сохраняя при этом своих ссылках статичными.

+0

Привет, спасибо. – Matrix

+0

Добро пожаловать! – Raphael

0

Если я правильно вас понял , прямо сейчас у вас нет URL-адреса с индексом имен, в его случае это нормально, когда при создании шаблона он пытается найти URL-адрес с именем index, а когда он его не найдет, он терпит неудачу. возможно, необходимо будет создать URL и перенаправления на другой точке зрения на данный момент, как описано здесь:

Redirect to named url pattern directly from urls.py in django?

UPDATE:

Я до сих пор не совсем уверен, что вы хотите (жаль об этом), но я подозреваю, что вы хотите сделать что-то похожее на это:

from django.conf.urls import patterns, include, url 
from django.core.urlresolvers import reverse_lazy 
from django.views.generic import RedirectView 

urlpatterns = patterns('', 
    url(r'^exams/', include('exams.urls', namespace="exams")), 
    url(r'^/$', RedirectView.as_view(url=reverse_lazy('exams:index'), name="index"), 
) 

Решение, которое Рафаэль дает вам похоже, но пользователь не будет перенаправлен (с обоими URL-адресами пользователь увидит один и тот же контент). Может быть, это то, что вы ищете?

+0

Привет, Спасибо за ваш ответ. Я обновил свой пост. Я тестировал urls.py с именем = "index" до этого, но он не работал ни с одним. но ссылка, которую вы предоставили, работала как шарм. Большое спасибо. – Matrix

+0

Привет снова. Жаль, что это было плохо. Я думал, что это работает. Фактически, используя ссылку, которую вы мне дали, я мог бы реализовать индекс, если бы использовал другой адрес для индекса моего приложения. Таким образом, я не смогу использовать http: // mydomain/как мою индексную страницу. Я обновляю свой пост, чтобы добавить примеры, чтобы прояснить проблему. Спасибо за ваш ответ. – Matrix

+0

Привет. Да, я искал sth. как тот, который рекомендовал Рафаэль. Однако ваш ответ был очень полезен. Большое спасибо. – Matrix

Смежные вопросы