随笔 - 91  文章 - 0  评论 - 2  阅读 - 44255

带分页功能的博客部分代码

程序目录

models.py

from django.db import models

# Create your models here.
class Category(models.Model):
    caption_c=models.CharField(max_length=16)


# class ArticleType(models.Model):
#     caption_a=models.CharField(max_length=16)


class Article(models.Model):
    title=models.CharField(max_length=32)
    content=models.CharField(max_length=255)

    category=models.ForeignKey(Category,on_delete=models.CASCADE)
    # article_type=models.ForeignKey(ArticleType,on_delete=models.CASCADE)

    type_choice=(
        (1,'Python'),
        (2,'OpenStack'),
        (3,"Linux"),
    )
    article_type_id=models.IntegerField(choices=type_choice)

 

views.py

from django.contrib import admin
from django.urls import path
from app01 import views
from django.conf.urls import url
urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^article-(?P<article_type_id>\d+)-(?P<category_id>\d+).html',views.article,name='article'),
]

 

views.py

from django.shortcuts import render
from app01 import models
# Create your views here.
def article(request,*args,**kwargs):
    # print(request.path_info) #获取当前url
    # from django.urls import reverse
    # url=reverse('article',kwargs=kwargs)
    # print(url)
    # print(kwargs)  #{'article_type_id': '1', 'category_id': '2'}

    condition={}
    for k,v in kwargs.items():
        kwargs[k]=int(v)
        if v=='0':
            pass
        else:
            condition[k]=v

    # article_type_list=models.ArticleType.objects.all()
    article_type_list=models.Article.type_choice
    category_list=models.Category.objects.all()
    # c={'article_type_id': '1', 'category_id': '2'}
    result= models.Article.objects.filter(**condition)
    return render(request,'article.html',{'result':result,
                                          'article_type_list':article_type_list,
                                          'category_list':category_list,
                                          'arg_dict':kwargs})

 

自定义函数

templatetags--->filter.py

from django import template
from django.utils.safestring import mark_safe

register = template.Library()

@register.simple_tag
def filter_all(arg_dict,k):
    '''
        {% if arg_dict.article_type_id == 0 %}
            <a class="active" href="/article-0-{{ arg_dict.category_id }}.html">全部</a>
        {% else %}
            <a  href="/article-0-{{ arg_dict.category_id }}.html">全部</a>
        {% endif %}
    '''
    if k == 'article_type_id':
        n1=arg_dict['article_type_id']
        n2=arg_dict['category_id']
        if n1 == 0:
            ret = '<a class="active" href="/article-0-%s.html">全部</a>' % n2
        else:
            ret = '<a href="/article-0-%s.html">全部</a>' % n2
    else:
        n1 = arg_dict['category_id']
        n2 = arg_dict['article_type_id']
        if n1 == 0:
            ret = '<a class="active" href="/article-%s-0.html">全部</a>' % n2
        else:
            ret = '<a href="/article-%s-0.html">全部</a>' % n2
    return mark_safe(ret)

@register.simple_tag
def filter_article_type(article_type_list,arg_dict):
    '''
      {% for row in article_type_list %}
            {% if row.id == arg_dict.article_type_id %}
                <a  class="active" href="/article-{{ row.id }}-{{ arg_dict.category_id }}.html">{{ row.caption_a }}</a>
            {% else %}
                <a  href="/article-{{ row.id }}-{{ arg_dict.category_id }}.html">{{ row.caption_a }}</a>
            {% endif %}
        {% endfor %}
    '''
    ret=[]
    for row in article_type_list:
        if row[0] == arg_dict['article_type_id']:
            temp='<a class="active" href="/article-%s-%s.html">%s</a>'%(row[0],arg_dict['category_id'],row[1])
        else:
            temp = '<a href="/article-%s-%s.html">%s</a>'%(row[0], arg_dict['category_id'], row[1])
        ret.append(temp)
    return  mark_safe(''.join(ret))

@register.simple_tag
def filter_category_type(category_list,arg_dict):
    '''
    {% for row in category_list %}
            {% if row.id == arg_dict.category_id %}
                <a class="active" href="/article-{{ arg_dict.article_type_id }}-{{ row.id }}.html">{{ row.caption_c }}</a>
            {% else %}
                <a href="/article-{{ arg_dict.article_type_id }}-{{ row.id }}.html">{{ row.caption_c }}</a>
            {% endif %}
        {% endfor %}
    :return:
    '''
    let = []
    for row in category_list:
        if row.id == arg_dict['category_id']:
           lemp = '<a class="active" href="/article-%s-%s.html">%s</a>'%(arg_dict['article_type_id'],row.id,row.caption_c)
        else:
            lemp = '<a href="/article-%s-%s.html">%s</a>'%(arg_dict['article_type_id'],row.id,row.caption_c)
        let.append(lemp)
    return mark_safe(''.join(let))

 

带自定义函数的模板

article.html

{% load filter %}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .condition a {
            display: inline-block;
            padding:3px 5px;
            border: 1px solid #dddddd;
            margin:5px 5px;

        }
        .condition a.active{
            background-color: brown;
        }

    </style>
</head>
<body>
    <h1>过滤条件</h1>
    <div class="condition">
        <div>
        {% filter_all  arg_dict  'article_type_id' %}
        {% filter_article_type article_type_list arg_dict %}
        </div>

        <div>
        {% filter_all  arg_dict  'category_id' %}
        {% filter_category_type category_list arg_dict %}
        </div>
    </div>

    <h1>查询结果</h1>
    <ul>
    {% for row in result %}
        <li>{{ row.id }}-{{ row.title }}</li>
    {% endfor %}
    </ul>
</body>
</html>

 

 

不带自定义函数的模板

article_bak.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .condition a {
            display: inline-block;
            padding:3px 5px;
            border: 1px solid #dddddd;
            margin:5px 5px;

        }
        .condition a.active{
            background-color: brown;
        }

    </style>
</head>
<body>
    <h1>过滤条件</h1>
    <div class="condition">
        <div>
        {% if arg_dict.article_type_id == 0 %}
            <a class="active" href="/article-0-{{ arg_dict.category_id }}.html">全部</a>
        {% else %}
            <a  href="/article-0-{{ arg_dict.category_id }}.html">全部</a>
        {% endif %}
        {% for row in article_type_list %}
            {% if row.id == arg_dict.article_type_id %}
                <a  class="active" href="/article-{{ row.id }}-{{ arg_dict.category_id }}.html">{{ row.caption_a }}</a>
            {% else %}
                <a  href="/article-{{ row.id }}-{{ arg_dict.category_id }}.html">{{ row.caption_a }}</a>
            {% endif %}
        {% endfor %}
        </div>

        <div>
        {% if arg_dict.category_id == 0 %}
            <a class="active" href="/article-{{ arg_dict.article_type_id }}-0.html">全部</a>
        {% else %}
            <a href="/article-{{ arg_dict.article_type_id }}-0.html">全部</a>
        {% endif %}
        {% for row in category_list %}
            {% if row.id == arg_dict.category_id %}
                <a class="active" href="/article-{{ arg_dict.article_type_id }}-{{ row.id }}.html">{{ row.caption_c }}</a>
            {% else %}
                <a href="/article-{{ arg_dict.article_type_id }}-{{ row.id }}.html">{{ row.caption_c }}</a>
            {% endif %}
        {% endfor %}
        </div>
    </div>

    <h1>查询结果</h1>
    <ul>
    {% for row in result %}
        <li>{{ row.id }}-{{ row.title }}</li>
    {% endfor %}
    </ul>
</body>
</html>

posted on   SZ_文彬  阅读(178)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示