如何烘干我的Django视图

时间:2016-01-29 18:15:27

标签: django django-models django-templates django-admin django-views

随着我的Django技能水平的提高,我开始以不同的方式看到我的代码,我不顾一切地找到一种不在我的观点中重复自己的方法 - 如下所示。我将非常感谢应该如何设置我的视图的示例。谢谢。

# -*- coding: utf-8 -*-
from django.shortcuts import render
from listings.models import Listing
from posts.models import Reveal


def home(request):
    return render(request, "pages/home.html", {})


def about(request):
    reveals = Reveal.objects.all().order_by('?')[:1:1]
    listings = Listing.objects.filter(featured_choices="YES").order_by('?')[:1:1]
    return render(request, 'pages/about.html', {'listings': listings, 'reveals': reveals})


def team(request):
    reveals = Reveal.objects.all().order_by('?')[:1:1]
    listings = Listing.objects.filter(featured_choices="YES").order_by('?')[:1:1]
    return render(request, "pages/theteam.html", {'listings': listings, 'reveals': reveals})


def why(request):
    reveals = Reveal.objects.all().order_by('?')[:1:1]
    listings = Listing.objects.filter(featured_choices="YES").order_by('?')[:1:1]
    return render(request, "pages/why.html", {'listings': listings, 'reveals': reveals})


def services(request):
    reveals = Reveal.objects.all().order_by('?')[:1:1]
    listings = Listing.objects.filter(featured_choices="YES").order_by('?')[:1:1]
    return render(request, "pages/services.html", {'listings': listings, 'reveals': reveals})


def selling_facts(request):
    reveals = Reveal.objects.all().order_by('?')[:1:1]
    listings = Listing.objects.filter(featured_choices="YES").order_by('?')[:1:1]
    return render(request, "pages/selling_facts.html", {'listings': listings, 'reveals': reveals})


def buying_facts(request):
    reveals = Reveal.objects.all().order_by('?')[:1:1]
    listings = Listing.objects.filter(featured_choices="YES").order_by('?')[:1:1]
    return render(request, "pages/buying_facts.html", {'listings': listings, 'reveals': reveals})


def liquor_licenses(request):
    reveals = Reveal.objects.all().order_by('?')[:1:1]
    listings = Listing.objects.filter(featured_choices="YES").order_by('?')[:1:1]
    return render(request, "pages/liquor_licenses.html", {'listings': listings, 'reveals': reveals})


def contact(request):
    return render(request, "pages/contact.html", {})

1 个答案:

答案 0 :(得分:0)

您可以通过定义名为参数的网址来更改您的网址以反映其服务目的。您可以在单个视图中捕获它,并根据该参数呈现不同的页面:

# url definition
url(r'^pages/(?P<page>\w+)/$', views.render_pages, name='render-pages')

# your views
from django.http import Http404

def _get_template_by_parameter(page):
    if page == 'about':
        return 'pages/about.html'
    elif page == 'team':
        return 'pages/theteam.html'
    # some more branches here
    return None

def render_pages(request, page):
    reveals = Reveal.objects.all().order_by('?')[:1:1]
    listings = Listing.objects.filter(featured_choices="YES").order_by('?')[:1:1]
    template = _get_template_by_parameter(page)
    if template:
        return render(request, template, {'listings': listings, 'reveals': reveals})
    else:
        raise Http404

您可以访问以下网址:http://test.com/pages/abouthttp://test.com/pages/team。显然你需要更好的措辞,因为我只是快速编写代码。