美文网首页django-game
(三)django-game:game view 编写

(三)django-game:game view 编写

作者: 你常不走的路 | 来源:发表于2018-01-19 17:46 被阅读39次

    前面两篇已经写了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<tag_id>.*)/$', GamelistView.as_view(),name='gamelist'),#游戏列表
        url(r'^games/(?P<game_id>.*)/$', 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
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    {% for category in all_category %}
        <a href="#">{{ category.name }}</a>
        {% for tag in category.get_tags %}
            <a href="{% url 'gamelist' tag.id %}">{{ tag.name }}</a>
            {% endfor %}
    {% endfor %}
    </body>
    </html>
    
    gamelist
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>{{ game.name }}</title>
    </head>
    <body>
    <div>
        {% for game in tag.object_list %}
            <a href="{% url 'games' game.id %}">{{ game.name }}</a>
        {% endfor %}
    </div>
    <div class="pageturn">
        <ul class="pagelist">
            {% if tag.has_previous %}
                <li class="long"><a href="?{{ tag.previous_page_number.querystring }}">上一页</a></li>
            {% endif %}
            {% for page in tag.pages %}
                {% if page %}
                    {% ifequal page tag.number %}
                        <li class="active"><a href="?{{ page.querystring }}">{{ page }}</a></li>
                    {% else %}
                        <li><a href="?{{ page.querystring }}" class="page">{{ page }}</a></li>
                    {% endifequal %}
                {% else %}
                    <li class="none"><a href="">...</a></li>
                {% endif %}
            {% endfor %}
            {% if tag.has_next %}
                <li class="long"><a href="?{{ tag.next_page_number.querystring }}">下一页</a></li>
            {% endif %}
        </ul>
    </div>
    </body>
    </html>
    
    game
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    {{ game.name }}
    {{ game.fav_nums }}
    </body>
    </html>
    

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

    相关文章

      网友评论

        本文标题:(三)django-game:game view 编写

        本文链接:https://www.haomeiwen.com/subject/yacaoxtx.html