django中将views.py中的python方法传递给html模板文件
常规的模板渲染
- from django.db import models
- # Create your models here.
- class ArticalType(models.Model):
- caption = models.CharField(max_length=16)
- class Category(models.Model):
- caption = models.CharField(max_length=16)
- class Artical(models.Model):
- title = models.CharField(max_length=32)
- content = models.CharField(max_length=255)
- category = models.ForeignKey(Category, on_delete=models.CASCADE)
- artical_type = models.ForeignKey(ArticalType, on_delete=models.CASCADE)
models.py
- urlpatterns = [
- path('admin/', admin.site.urls),
- re_path('artical-(?P<artical_type_id>\d+)-(?P<category_id>\d+).html', backend.artical),
- ]
urls.py
- from django.shortcuts import render
- from jax import models
- def artical(request, *args, **kwargs):
- print(kwargs)
- artical_type = models.ArticalType.objects.all()
- category = models.Category.objects.all()
- for k,v in kwargs.items():
- if v == '':
- artical = models.Artical.objects.all()
- else:
- artical = models.Artical.objects.filter(**kwargs)
- return render(request, "artical.html",
- {"artical_type": artical_type,
- "category": category,
- "artical": artical,})
views.py
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- <style>
- .tag a{
- display: inline-block;
- padding: 3px 5px;
- border: 1px solid #dddddd;
- margin: 5px 5px;
- {#text-decoration: none;#}
- }
- .tag a.w{
- background: #2459a2;
- }
- </style>
- </head>
- <body>
- <h1>搜索条件</h1>
- <div class="tag">
- <div>
- {% if artical_list.artical_type_id == 0 %}
- <a class="w" href="/artical-0-{{ artical_list.category_id }}.html">全部</a>
- {% else %}
- <a href="/artical-0-{{ artical_list.category_id }}.html">全部</a>
- {% endif %}
- {% for row in artical_type %}
- {% if row.id == artical_list.artical_type_id %}
- <a class="w" href="/artical-{{ row.id }}-{{ artical_list.category_id }}.html">{{ row.caption }}</a>
- {% else %}
- <a href="/artical-{{ row.id }}-{{ artical_list.category_id }}.html">{{ row.caption }}</a>
- {% endif %}
- {% endfor %}
- </div>
- <div>
- {% if artical_list.category_id == 0 %}
- <a class="w" href="/artical-{{ artical_list.artical_type_id }}-0.html">全部</a>
- {% else %}
- <a href="/artical-{{ artical_list.artical_type_id }}-0.html">全部</a>
- {% endif %}
- {% for row in category %}
- {% if row.id == artical_list.category_id %}
- <a class="w" href="/artical-{{ artical_list.artical_type_id }}-{{ row.id }}}}.html">{{ row.caption }}</a>
- {% else %}
- <a href="/artical-{{ artical_list.artical_type_id }}-{{ row.id }}.html">{{ row.caption }}</a>
- {% endif %}
- {% endfor %}
- </div>
- </div>
- <h1>搜索结果</h1>
- <ul>
- {% for row in artical %}
- <li>{{ row.id }} - {{ row.title }}</li>
- {% endfor %}
- </ul>
- </body>
- </html>
artical.html
将views.py中的python方法传递给html模板文件:
- from django.shortcuts import render
- from jax import models
- def artical(request, *args, **kwargs):
- print(kwargs)
- artical_type = models.ArticalType.objects.all()
- category = models.Category.objects.all()
- for k,v in kwargs.items():
- kwargs[k] = int(v) # 新添加
- if v == '':
- artical = models.Artical.objects.all()
- else:
- artical = models.Artical.objects.filter(**kwargs)
- return render(request, "artical.html",
- {"artical_type": artical_type,
- "category": category,
- "artical": artical,
- 'artical_list': kwargs}) # 新添加
views.py
在app下新建目录templatetags(必须为这个名字),里面可以自定义文件名称,这里定义为filter.py
- from django import template
- from django.utils.safestring import mark_safe
- register = template.Library()
- @register.simple_tag
- def filter_all(artical_list, k):
- '''
- {% if artical_list.artical_type_id == 0 %}
- <a class="w" href="/artical-0-{{ artical_list.category_id }}.html">全部</a>
- {% else %}
- <a href="/artical-0-{{ artical_list.category_id }}.html">全部</a>
- {% endif %}
- :return:
- '''
- if k == "artical_type_id":
- n1 = artical_list["artical_type_id"]
- n2 = artical_list["category_id"]
- if n1 == 0:
- ret = '<a class="w" href="/artical-0-%s.html">全部</a>' % n1
- else:
- ret = '<a href="/artical-0-%s.html">全部</a>' % n2
- else:
- n1 = artical_list["category_id"]
- n2 = artical_list["artical_type_id"]
- if n1 == 0:
- ret = '<a class="w" href="/artical-%s-0.html">全部</a>' % n2
- else:
- ret = '<a href="/artical-%s-0.html">全部</a>' % n2
- return mark_safe(ret)
- @register.simple_tag
- def filter_artical_type(artical_type, artical_list):
- """
- {% for row in artical_type %}
- {% if row.id == artical_list.artical_type_id %}
- <a class="w" href="/artical-{{ row.id }}-{{ artical_list.category_id }}.html">{{ row.caption }}</a>
- {% else %}
- <a href="/artical-{{ row.id }}-{{ artical_list.category_id }}.html">{{ row.caption }}</a>
- {% endif %}
- {% endfor %}
- :return:
- """
- ret = []
- for row in artical_type:
- if row.id == artical_list["artical_type_id"]:
- temp = '<a class="w" href="/artical-%s-%s.html">%s</a>' % (row.id, artical_list["category_id"],row.caption)
- else:
- temp = '<a href="/artical-%s-%s.html">%s</a>' % (row.id, artical_list["category_id"], row.caption)
- ret.append(temp)
- return mark_safe(''.join(ret))
- @register.simple_tag
- def filter_category(category, artical_list):
- """
- {% for row in category %}
- {% if row.id == artical_list.category_id %}
- <a class="w" href="/artical-{{ artical_list.artical_type_id }}-{{ row.id }}}}.html">{{ row.caption }}</a>
- {% else %}
- <a href="/artical-{{ artical_list.artical_type_id }}-{{ row.id }}.html">{{ row.caption }}</a>
- {% endif %}
- {% endfor %}
- :param category:
- :param artical_list:
- :return:
- """
- ret = []
- for row in category:
- if row.id == artical_list["category_id"]:
- temp = '<a class="w" href="/artical-%s-%s.html">%s</a>' % (artical_list["artical_type_id"], row.id, row.caption)
- else:
- temp = '<a href="/artical-%s-%s.html">%s</a>' % (artical_list["artical_type_id"], row.id, row.caption)
- ret.append(temp)
- return mark_safe(''.join(ret))
filter.py
前端html文件倒入方法,以及传递参数
- {% load filter %}
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- <style>
- .tag a{
- display: inline-block;
- padding: 3px 5px;
- border: 1px solid #dddddd;
- margin: 5px 5px;
- {#text-decoration: none;#}
- }
- .tag a.w{
- background: #2459a2;
- }
- </style>
- </head>
- <body>
- <h1>搜索条件</h1>
- <div class="tag">
- <div>
- {% filter_all artical_list 'artical_type_id' %}
- {# {% if artical_list.artical_type_id == 0 %}#}
- {# <a class="w" href="/artical-0-{{ artical_list.category_id }}.html">全部</a>#}
- {# {% else %}#}
- {# <a href="/artical-0-{{ artical_list.category_id }}.html">全部</a>#}
- {# {% endif %}#}
- {% filter_artical_type artical_type artical_list %}
- {# {% for row in artical_type %}#}
- {# {% if row.id == artical_list.artical_type_id %}#}
- {# <a class="w" href="/artical-{{ row.id }}-{{ artical_list.category_id }}.html">{{ row.caption }}</a>#}
- {# {% else %}#}
- {# <a href="/artical-{{ row.id }}-{{ artical_list.category_id }}.html">{{ row.caption }}</a>#}
- {# {% endif %}#}
- {# {% endfor %}#}
- </div>
- <div>
- {% filter_all artical_list 'category_id' %}
- {# {% if artical_list.category_id == 0 %}#}
- {# <a class="w" href="/artical-{{ artical_list.artical_type_id }}-0.html">全部</a>#}
- {# {% else %}#}
- {# <a href="/artical-{{ artical_list.artical_type_id }}-0.html">全部</a>#}
- {# {% endif %}#}
- {% filter_category category artical_list %}
- {# {% for row in category %}#}
- {# {% if row.id == artical_list.category_id %}#}
- {# <a class="w" href="/artical-{{ artical_list.artical_type_id }}-{{ row.id }}}}.html">{{ row.caption }}</a>#}
- {# {% else %}#}
- {# <a href="/artical-{{ artical_list.artical_type_id }}-{{ row.id }}.html">{{ row.caption }}</a>#}
- {# {% endif %}#}
- {# {% endfor %}#}
- </div>
- </div>
- <h1>搜索结果</h1>
- <ul>
- {% for row in artical %}
- <li>{{ row.id }} - {{ row.title }}</li>
- {% endfor %}
- </ul>
- </body>
- </html>
artical.html
转换时需要注意:
1.在app下新建的目录名字必须为templatetags。
2.html文件第一行需要添加"{% load 文件名 %}",以此来倒入自定义前端方法中的函数。
3.新建的函数文件中需要倒入模块
- from django import template
from django.utils.safestring import mark_safe
register = template.Library()- 以及需要对自定义方法添加装饰器
- @register.simple_tag
def fun(*args, **kwargs):
pass
方法二:
在templatetags目录中新建py文件,这里的"blog_left_menu.html"是另一个html模板文件
- from jax import models
- from django import template
- register = template.Library()
- @register.inclusion_tag("blog_left_menu.html")
- def function():
- ...
# 这里function()里面处理后数据返回仍然需要以字典形式返回给"blog_left_menu.html",直接用return返回字典即可,不需要render。
其他模板引用方法:
- {% load blog_left_menu %} <!--导入templatetags目录当中的文件-->
- {% get_left_menu username %} <!--引用所倒入文件blog_left_menu.py中的get_left_menu方法,并且提供username作为参数}-->
方法一是正常的将前端代码转换为py方法。
方法二更像是通过一次请求对模板做两次的渲染。
django中将views.py中的python方法传递给html模板文件的更多相关文章
- Django Admin 在内联中覆盖保存方法(admin.TabularInline)
一 使用环境 开发系统: windows IDE: pycharm 数据库: msyql,navicat 编程语言: python3.7 (Windows x86-64 executable in ...
- html中引入调用另一个公用html模板文件的方法
html中引入调用另一个公用html模板文件的方法 https://www.w3h5.com/post/53.html 这里我使用jquery的方法 <body> <div id=& ...
- django之 使用views.py里面的函数对表进行增删改查 内容(models.py中表的创建、views.py中函数的使用,基于对象的跨表查询)
models之对于表的创建有以下几种: 一对一:ForeignKey("Author",unique=True), OneToOneField("Author" ...
- javascript中的值如何传递到django下的views.py中或者数据库中?
用Ajax,Ajax有很多种写法,包括JQuery和JS,这里贴一个用JQuery写的最通用的Ajax,POST方法传递JSON格式数据: $.ajax({ url: "your url&q ...
- [Django笔记] views.py 深入学习
views.py 是django MTV 中的主要逻辑层,相当于MVC中的 Controller 以下的实例都基于这样一个路由表: urlpatterns = [ url(r'^(index)?$', ...
- Django之views.py视图函数学习
视图函数: 视图函数时存在django项目中的应用程的一个名为views.py的文件模块: 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 一 ...
- C#中调用python方法
最近因为项目设计,有部分使用Python脚本,因此代码中需要调用python方法. 1.首先,在c#中调用python必须安装IronPython,在 http://ironpython.codepl ...
- Django 向数据表中添加字段方法
在模型order中添加字段discount字段,并给予初始值0 方法: 先在models.py中修改模型 添加 discount = models.DecimalField(max_digits=8, ...
- django之创建第4个项目编写第一个动态模板文件
修改的地方: 1.index.html <!DOCTYPE html> <html lang="en"> <head> <meta cha ...
随机推荐
- C# Chat曲线图,在发布之后出现错误 Invalid temp directory in chart handler configuration c:\TempImageFiles\
First error message: Invalid temp directory in chart handler configuration c:\TempImageFiles\ Soluti ...
- hihoCoder#1121(二分图判定)
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 大家好,我是小Hi和小Ho的小伙伴Nettle,从这个星期开始由我来完成我们的Weekly. 新年回家,又到了一年一度大龄 ...
- java代码swing编程 制作一个单选按钮的Frame
不善于思考,结果费了时间,也没有效果 下面的框框可以做出来. package com.kk; import javax.swing.JFrame; import javax.swing.JLabel; ...
- Eclipse: “The import java.io cannot be resolved”
检查一下选项: 重点看jdk的绑定 43down voteaccepted Check your Eclipse preferences: Java -> Installed JREs. The ...
- hibernate学习笔记(3)hibernate常用配置以及session对象
更改hibernate.cfg.xml的内容,常用配置有: <!-- 把hibernate运行时的SQL语句显示到控制台 --> <property name="sho ...
- [P4782]2-SAT问题
解题关键:2-sat模板,tarjan解决. #include<iostream> #include<cstring> #include<cstdio> #incl ...
- Mybatis的批处理以及执行Update返回行数为负数
项目中用到了批量更新. 在开发当中,可能经常会遇到批量处理这种情况,一般都再在java层面进行, 其本质是节省数据库连接打开关闭的的次数,占用更少的运行内存. 下面先记一下批处理映射吧: mybati ...
- Nginx 正向代理和反向代理
正向代理的概念 正向代理,也就是传说中的代理,他的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器这个代理服务器呢,他能访问那个我不能访问的网站于是我先连上代 ...
- 容器控件JPanel的使用
-----------------siwuxie095 工程名:TestUI 包名:com.siwuxie095.ui 类名:TestPanel.java 工程结构目录如下: 在默认窗体 JFrame ...
- c#与Java事件定义的不同
C#: using System; using System.Collections.Generic; using System.Text; namespace Test1 { class Progr ...