常规的模板渲染

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模板文件的更多相关文章

  1. Django Admin 在内联中覆盖保存方法(admin.TabularInline)

    一  使用环境 开发系统: windows IDE: pycharm 数据库: msyql,navicat 编程语言: python3.7  (Windows x86-64 executable in ...

  2. html中引入调用另一个公用html模板文件的方法

    html中引入调用另一个公用html模板文件的方法 https://www.w3h5.com/post/53.html 这里我使用jquery的方法 <body> <div id=& ...

  3. django之 使用views.py里面的函数对表进行增删改查 内容(models.py中表的创建、views.py中函数的使用,基于对象的跨表查询)

    models之对于表的创建有以下几种: 一对一:ForeignKey("Author",unique=True),  OneToOneField("Author" ...

  4. javascript中的值如何传递到django下的views.py中或者数据库中?

    用Ajax,Ajax有很多种写法,包括JQuery和JS,这里贴一个用JQuery写的最通用的Ajax,POST方法传递JSON格式数据: $.ajax({ url: "your url&q ...

  5. [Django笔记] views.py 深入学习

    views.py 是django MTV 中的主要逻辑层,相当于MVC中的 Controller 以下的实例都基于这样一个路由表: urlpatterns = [ url(r'^(index)?$', ...

  6. Django之views.py视图函数学习

    视图函数: 视图函数时存在django项目中的应用程的一个名为views.py的文件模块: 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 一 ...

  7. C#中调用python方法

    最近因为项目设计,有部分使用Python脚本,因此代码中需要调用python方法. 1.首先,在c#中调用python必须安装IronPython,在 http://ironpython.codepl ...

  8. Django 向数据表中添加字段方法

    在模型order中添加字段discount字段,并给予初始值0 方法: 先在models.py中修改模型 添加 discount = models.DecimalField(max_digits=8, ...

  9. django之创建第4个项目编写第一个动态模板文件

    修改的地方: 1.index.html <!DOCTYPE html> <html lang="en"> <head> <meta cha ...

随机推荐

  1. [转]java 中的序列化是什么意思?有什么好处?

    1.序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来.虽然你可以用你自己的各种各样的方法来保存Object States,但是Java给你提供一种应该比 ...

  2. IE版本的标准定义

    解决方案 首页加代码把IE浏览器的标准改了,无论客户用的什么IE,都是按照IE7的标准来的. <meta http-equiv="X-UA-Compatible" conte ...

  3. JAVA 正则表达式 Regex

    //正则表达式,去掉空格.换行.制表位 public static void replaceBlank(){ Pattern p = Pattern.compile("\\s*|\t|\r| ...

  4. Spark on yarn的两种模式 yarn-cluster 和 yarn-client

    从深层次的含义讲,yarn-cluster和yarn-client模式的区别其实就是Application Master进程的区别,yarn-cluster模式下,driver运行在AM(Applic ...

  5. Python:内置split()方法

    描述 Python split()通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串 语法 split()方法语法: str.split(str="&qu ...

  6. MySQL脚本自动安装mysql-5.6.15-linux-glibc2.5-x86_64.tar.gz

    脚本安装mysql-5.6.15-linux-glibc2.5-x86_64.tar.gz 先准备好数据文件的路径 softdir='/data/soft' 把脚本和tar包放在相应的路径下,其实就是 ...

  7. redis学习三 redis持久化

      1,快照持久化 1简介      redis可以通过创建快照来获得某个时间点上的内存内容的数据副本,有了副本之后,就可以将副本发送到其他redis服务器上从而创建相同数据的从服务器,同时快照留在原 ...

  8. 记一次完整的android源码截屏事件的捕获<标记砖>

    http://blog.csdn.net/buptgshengod/article/details/19911909?utm_source=tuicool&utm_medium=referra ...

  9. DAY17-Django之logging

    LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'standard': { 'format': ...

  10. 【WebRTC】简介

    WebRTC 名称源自网页实时通信(英语:Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的API.它于2011年6月1日开源并在Goog ...