这可能是一个愚蠢的问题,但它真的很晚了,我的大脑在我的第六杯咖啡后死了。
我正在构建(或尝试)一个简单的博客应用程序,该应用程序将在主页上显示文章索引 - 也就是说。最近的文章 - 以及主要博客页面。为此,我设法勾勒出以下观点:
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中显示索引,我复制了代码,只更改了几个变量,即。要呈现的名称和模板。
我可以做些什么来在两个网址中呈现此视图,但在我的views.py中没有复制它?
我是否正确地认为我必须有3个视图,一个主视图和两个子视图将从主视图中导入代码?
或者我应该使用自定义模板标记吗?
修改
根据要求,添加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 :(得分: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