2014-02-13 5 views
0

Это, наверное, глупый вопрос, но его очень поздно здесь, и мой мозг умер после моего 6-го кофе.Django - Повторное использование просмотров в разных шаблонах

Я создаю (или пытаюсь) простое приложение для ведения блогов, которое будет отображать индекс статьи на главной странице - иначе. последние статьи - и на главной странице блога. Для этого мне удалось набросать разработать следующий вид:

def index(request): 
'''Article index''' 
archive_dates = Article.objects.datetimes('date_publish','month', order='DESC') 
categories = Category.objects.all() 

page = request.GET.get('page') 
article_queryset = Article.objects.all() 
paginator = Paginator(article_queryset, 5) 

try: 
    articles = paginator.page(page) 
except PageNotAnInteger: 
    #If page requested is not an integer, return first page. 
    articles = paginator.page(1) 
except EmptyPage: 
    #If page requested is out of range, deliver last page of results. 
    articles = paginator.page(paginator.num_pages) 

return render(
    request, 
    'blog/article/index.html', 
{ 
    'articles': articles, 
    'archive_dates': archive_dates, 
    'categories': categories 
} 
) 

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

  1. Что я могу сделать, чтобы сделать это представление в обоих URL-адресах, но не дублировать его в моих view.py?

  2. Я прав, думая, что мне придется иметь 3 вида, основной и два подзаголовка, которые будут импортировать код из основного?

  3. Или использовать вместо этого специальный тег шаблона?

EDIT

В соответствии с просьбой, добавив urls.py

from django.conf.urls import * 
from django.contrib import admin 
from settings import MEDIA_ROOT 
from django.views.generic import TemplateView 
from blog.views import * 
admin.autodiscover() 

urlpatterns = patterns('', 
#Blog URLs 
    url('^$', home_index, name='blog-preview'), 
    url('^blog/archive/(?P<year>[\d]+)/(?P<month>[\d]+)/$', date_archive, name='blog-date-archive'), 
    url('^blog/archive/(?P<slug>[-\w]+)/$', category_archive, name='blog-category-archive'), 
    url('^blog/categories/', category_list, name='blog-category-list'), 
    url('^blog/(?P<slug>[-\w]+)/$', single, name='blog-article-single'), 
    url('^blog/$', index, name='blog-article-index'), 
    url(r'^contact/', include("contact_form.urls", namespace="contact_form")), 
    url(r'^admin/', include(admin.site.urls)), 
) 
+0

Вы должны иметь возможность просто добавить строку в свой urls.py. Можете ли вы отредактировать свой пост, чтобы включить его? – schillingt

+0

Добавил мой urls.py, спасибо, что помог мне! – Hevlastka

ответ

1

Это очень просто: карта две ссылки в вашем конф с точки зрения, как это:

urlpatterns = patterns('', 
         url(r'first_expression', index, name='first'), 
         url(r'second_expression', index, name='second'), 
         ) 

Кроме того, немного посоветуйте свой код: старайтесь избегать подстановочных импортов. Они опасны ... Использование insead:

from package import MyClass, my_function, my_etc 
+0

Это сделало трюк спасибо! Однако есть ли способ сделать визуализацию различных шаблонов в зависимости от URL-адреса? – Hevlastka

+3

Имейте template_name как параметр в методе представления и передайте его в шаблоне url, аналогичном тому, как имя используется в примере Alvaro. – schillingt

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