常规的模板渲染

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. MySQL 常用启动,关闭,登录脚本

    MySQL 常用启动,关闭,登录脚本 规范化mysql的启动,关闭,登录 1 cat mysql_env.ini #set env MYSQL_USER=system #注意用户权限 MYSQL_PA ...

  2. DripRoad(点滴之路)

    关于DripRoad DripRoad 意为点滴之路,程序员之路在于点滴积累!是的,这些积累包括技术能力,沟通能力,业务能力等等.   我 我是唐志伟,2009年一个人来上海,就读于上海医疗器械高等专 ...

  3. 【转】rails 遇到 Could not find a JavaScript runtime execjs错误(ubuntu)

    当我运行 $rails s 遇到下面错误 sudo apt-get install python-software-properties sudo add-apt-repository ppa:chr ...

  4. web基础 (三) CSS

    css 层叠样式表 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明. selector { property: value; property: value; ... property: ...

  5. 简单叙述一下MYSQL的优化

    一个面试题.每次没能完全答对.各位补充一下.或者发表自己的答案:cry: 现在大概列出如下:(忘各位补充)1.数据库的设计尽量把数据库设计的更小的占磁盘空间.1).尽可能使用更小的整数类型.(medi ...

  6. 2016.8.11 DataTable合并及排除重复方法

    合并: DataTable pros=xxx; DataTable pstar=yyy; //将两张DataTable合成一张 foreach (DataRow dr in pstar.Rows) { ...

  7. redis学习二 排序

    文章转载自:http://www.cnblogs.com/redcreen/archive/2011/02/15/1955226.html redis支持对list,set和sorted set元素的 ...

  8. Beautiful Soup 4.2.0

    Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式 快速开始 pip install beaut ...

  9. 11-15SQLserver基础--数据库之范式理论

    数据库的设计理论与思路 在设计数据库的时候,有一个著名的设计理论---范式理论. 1.内容: 第一范式:每一列的数据类型要单一,必须要统一: 第二范式:在设计主键的时候,主键尽量更能体现表中的数据信息 ...

  10. spring-初始化bean

    @EnableScheduling@Servicepublic class BaseTask implements InitializingBean, ApplicationContextAware{ ...