django views.py避免在视图

时间:2018-01-29 02:53:23

标签: python django python-2.7 django-views

我使用DJANGO创建了一个简单的博客,其中有三个类在views.py

views.py

def blog(request):
    posts=blog.objects.filter(createddate__lte=timezone.now()).order_by('-createddate')
    if request.method == "POST":
       name = request.POST.get('name')
       message = request.POST.get('message')
       contact.objects.create(name=name message=message)
    return render(request, 'base.html'{'posts':posts})

def blog_details(request,slug):
    posts=blog..objects.filter(createddate__lte=timezone.now()).order_by('-createddate')
    pos=get_object_or_404(app_descripts, slug_title=slug)
    if request.method == "POST":
       name = request.POST.get('name')
       message = request.POST.get('message')
       contact.objects.create(name=name message=message)
    return render(request, 'blog_details.html'{'posts':posts,'pos':pos})

def about(request):
    posts=blog..filter(createddate__lte=timezone.now()).order_by('-createddate')
    if request.method == "POST":
       name = request.POST.get('name')
       message = request.POST.get('message')
       contact.objects.create(name=name message=message)
    return render(request, 'about.html'{'posts':posts})

在html中我使用这种方式,因为我有一些代码:

{% extends 'blog/base.html' %}
    {% block content %}
         .......................
        {% endblock %}

在base.html的块内容中,我有一个简单的包含我所有帖子的代码(

posts=blog..filter(createddate__lte=timezone.now()).order_by('-createddate'))。

但要查看所有页面中的帖子(blog,blog_details,about)必须编写此代码(

posts=blog..filter(createddate__lte=timezone.now()).order_by('-createddate')

在所有视图中都能正常工作。 发生的事情和我的html联系表格因为内容不足。

如何避免在所有视图中执行相同的代码?

1 个答案:

答案 0 :(得分:1)

我建议你在另一个函数中编写重复代码,并从你需要它的每个视图中调用它。

def get_posts():
    # Here you write your repeated code

从你的观点中调用它

def my_view(request):
    posts = get_posts()
    return render(request, 'template.html', {'posts': posts})