我用django2.1创建了一个电影网站,我有一些类型的管理顶部,最新,惊悚,恐怖,动作等页面。。。这很好,但我还有另外10+种风格和10+年要做,我想一定有更好的方式,干的方式,然后有单独的页面时,页面布局是一样的等等,只是内容的变化,就像在我的细节视图。。我有谷歌,搜索等我似乎搞不懂。感谢任何帮助
这是我的观点
from django.shortcuts import render, get_object_or_404
from .models import Movie, Banner
from django.views.generic import ListView, DetailView
# Base page for pages.
def base(request):
return render(request, 'movies/base.html')
# HOME-PAGE
class HomeListView(ListView):
model = Movie
template_name = 'movies/home.html' # <app>/<model>_<viewtype>.html
def get_context_data(self, **kwargs):
context = super(HomeListView, self).get_context_data(**kwargs)
context['admin_movies'] = Movie.objects.filter(admin_top__contains='Yes').order_by('-date_posted')
context['latest_movies'] = Movie.objects.all().order_by('-date_posted')
context['thriller_movies'] = Movie.objects.filter(genre__contains='Thriller').order_by('-date_posted')
context['horror_movies'] = Movie.objects.filter(genre__contains='Horror').order_by('-date_posted')
context['action_movies'] = Movie.objects.filter(genre__contains='Action').order_by('-date_posted')
# Add any other variables to the context here
return context
# MOVIE DETAIL PAGE
class MovieDetailView(DetailView):
model = Movie
queryset = Movie.objects.all()
template_name = 'movies/movie-detail.html'
def get_object(self):
title_ = self.kwargs.get('title')
return get_object_or_404(Movie, title=title_)
# ADMIN MOVIE-PAGE
class AdminListView(ListView):
model = Movie
queryset = Movie.objects.filter(admin_top__contains='Yes')
template_name = 'movies/admin-top.html'
context_object_name = 'admin_movies'
ordering = ['-date_posted']
paginate_by = 2
# LATEST MOVIE-PAGE
class LatestListView(ListView):
model = Movie
template_name = 'movies/latest.html'
context_object_name = 'latest_movies'
ordering = ['-date_posted']
# THRILLER MOVIE-PAGE
class ThrillerListView(ListView):
model = Movie
queryset = Movie.objects.filter(genre__contains='Thriller')
template_name = 'movies/thriller.html'
context_object_name = 'thriller_movies'
ordering = ['-date_posted']
# ACTION MOVIE-PAGE
class ActionListView(ListView):
model = Movie
queryset = Movie.objects.filter(genre__contains='Action')
template_name = 'movies/action.html'
context_object_name = 'action_movies'
ordering = ['-date_posted']
# HORROR MOVIE-PAGE
class HorrorListView(ListView):
model = Movie
queryset = Movie.objects.filter(genre__contains='Horror') # only for filter/query on field - no more at time with using this
template_name = 'movies/horror.html'
context_object_name = 'horror_movies'
ordering = ['-date_posted','genre']
这是我的模型
从django.db公司导入模型
^{pr2}$这是我的网址
from django.urls import path
from .models import Movie
from .views import (
HomeListView,
MovieDetailView,
AdminListView,
LatestListView,
ThrillerListView,
HorrorListView,
HomeListView,
ActionListView,
base
)
urlpatterns = [
path('', HomeListView.as_view(), name='movie-home'),
path('movie-detail/<title>/', MovieDetailView.as_view(), name='movie-detail'),
path('admin-top/', AdminListView.as_view(), name='movie-admin'),
path('latest/', LatestListView.as_view(), name='movie-latest'),
path('thriller/', ThrillerListView.as_view(), name='movie-thriller'),
path('horror/', HorrorListView.as_view(), name='movie-horror'),
path('action/', ActionListView.as_view(), name='movie-action'),
path('base/', base, name='movie-base'),
]
根本不需要单独的观点。URL应该捕获genre关键字,然后您的视图在get queryset方法中使用它来获取相关的电影。在
。。。在
^{pr2}$创建一个名为
GenreListView
的类,它是ListView
的子类。让所有其他类型页面子类GenreListView
。将所有常见的逻辑/成员变量作为GenreListView
的一部分,而不是将它们放入从中继承的类中。例如,它们都使用model = Movie
,因此将其设置为GenreListView
。在如果您对Python-OOP非常熟悉,那么您可以将这一点带到一个逻辑的极端,并考虑出许多可能不像
model = Movie
那么明显的事情。例如,您可以在超类上创建一个存根方法(例如,称为get_qs_filter()
),该超类返回一个在形成查询集时使用的过滤器。存根本身不做任何事情,而是由它继承的类实现该方法。但是超类仍然可以调用get_qs_filter()
,将其传递给Movie.objects.filter
,并将其设置为queryset
成员变量。在相关问题 更多 >
编程相关推荐