Django - 在不同的模板中重用视图

时间:2014-02-13 00:11:05

标签: python django django-views

这可能是一个愚蠢的问题,但它真的很晚了,我的大脑在我的第六杯咖啡后死了。

我正在构建(或尝试)一个简单的博客应用程序,该应用程序将在主页上显示文章索引 - 也就是说。最近的文章 - 以及主要博客页面。为此,我设法勾勒出以下观点:

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. 我可以做些什么来在两个网址中呈现此视图,但在我的views.py中没有复制它?

  2. 我是否正确地认为我必须有3个视图,一个主视图和两个子视图将从主视图中导入代码?

  3. 或者我应该使用自定义模板标记吗?

  4. 修改

    根据要求,添加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)),
    )
    

1 个答案:

答案 0 :(得分:1)

这很简单:将你的conf中的两个网址映射到这样的视图:

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