(三)django-game:game view 编写

前面两篇已经写了model 和xadmin 后台就已经搭建成功了
现在就写写game 的views
首先 我们给 它分分页 首页 index gamelist 游戏列表页 game 游戏详情页

首先来index
from django.shortcuts import render
from django.views.generic.base import View

# Create your views here.
from .models import Games, Category, Tags


class GameIndexView(View):
    def get(self, request):
        # 自己还可以添加更多的  分类 我这里 就先写这么多
        all_category = Category.objects.all()  # 二级类别直接用他的外键显示
        new_games = Games.objects.filter(is_new=True)[:50]  # 最新的吧 50个
        hot_games = Games.objects.filter(is_hot=True)[:5]  # 最热 5
        fav_games = Games.objects.order_by('-fav_num')[:5]  # 收藏最多的游戏
        return render(request, 'index.html', {
            "all_category": all_category,
            "new_games": new_games,
            "hot_games": hot_games,
            "fav_games": fav_games,
        })
然后是 gamelist

提供了一个tag_id 同时 进行了 分页 分页 只显示一个 容易测试 功能 可随意更改
下面的 get_games 是 在model中写方法 在下面 我会讲

#首页只提供显示 不提供  筛选 最后用户点击一个类别 就会跳到 一个新的页面
class GamelistView(View):
    def get(self,request,tag_id):
        tag = Tags.objects.get(id=tag_id).get_games()
        try:
            page = request.GET.get('page', 1)
        except PageNotAnInteger:
            page = 1

        # Provide Paginator with the request object for complete querystring generation
        p = Paginator(tag, 1, request=request)   #这里的1  为 1 个 为一个
        tag = p.page(page)
        return render(request,'gamelist.html',{
            'tag':tag
        })
最后是 game

提供一个game_id

class GamedetailView(View):
    def get(self, request, game_id):
        game = Games.objects.get(id=game_id)
        hot_games = Games.objects.filter(is_hot=True)[:5]  # 最热 5
        fav_games = Games.objects.order_by('-fav_nums')[:5]  # 收藏最多的游戏

        return render(request, 'game.html', {
            'game': game,
            "hot_games": hot_games,
            "fav_games": fav_games,
        })
然后 就是配置 urls
import xadmin
from django.conf.urls import url
from django.contrib import admin

from game.views import GamedetailView,GameIndexView,GamelistView

urlpatterns = [
    url(r'^xadmin/', xadmin.site.urls),
    url(r'^$', GameIndexView.as_view(),name='index'),   #首页
    url(r'^gamelist/(?P.*)/$', GamelistView.as_view(),name='gamelist'),#游戏列表
    url(r'^games/(?P.*)/$', GamedetailView.as_view(),name='games'),#游戏详情
]
前端填写内容的时候 我在model中定义了 一些方法

game 目录下 model Tags 添加下列方法

    def get_games(self):
        #获取有这个标签的所有游戏
        return self.games_set.all()

在model Category中 添加

    def get_tags(self):
        #获取所有属于这个类别的标签
        return  self.tags_set.all()

下面是templates 没有前端页面 所以我就直接测试能否显示 和跳转 后期在看是否编写前端页面

index



    
    Title


{% for category in all_category %}
    {{ category.name }}
    {% for tag in category.get_tags %}
        {{ tag.name }}
        {% endfor %}
{% endfor %}


gamelist



    
    {{ game.name }}


{% for game in tag.object_list %} {{ game.name }} {% endfor %}
    {% if tag.has_previous %}
  • 上一页
  • {% endif %} {% for page in tag.pages %} {% if page %} {% ifequal page tag.number %}
  • {{ page }}
  • {% else %}
  • {{ page }}
  • {% endifequal %} {% else %}
  • ...
  • {% endif %} {% endfor %} {% if tag.has_next %}
  • 下一页
  • {% endif %}
game



    
    Title


{{ game.name }}
{{ game.fav_nums }}


这样 就设计的差不多了 后面 就是 用户个人信息的编写了

你可能感兴趣的:((三)django-game:game view 编写)