常规的模板渲染

  1. from django.db import models
  2.  
  3. # Create your models here.
  4.  
  5. class ArticalType(models.Model):
  6. caption = models.CharField(max_length=16)
  7.  
  8. class Category(models.Model):
  9. caption = models.CharField(max_length=16)
  10.  
  11. class Artical(models.Model):
  12. title = models.CharField(max_length=32)
  13. content = models.CharField(max_length=255)
  14.  
  15. category = models.ForeignKey(Category, on_delete=models.CASCADE)
  16. artical_type = models.ForeignKey(ArticalType, on_delete=models.CASCADE)

models.py

  1. urlpatterns = [
  2. path('admin/', admin.site.urls),
  3. re_path('artical-(?P<artical_type_id>\d+)-(?P<category_id>\d+).html', backend.artical),
  4. ]

urls.py

  1. from django.shortcuts import render
  2. from jax import models
  3.  
  4. def artical(request, *args, **kwargs):
  5. print(kwargs)
  6. artical_type = models.ArticalType.objects.all()
  7. category = models.Category.objects.all()
  8. for k,v in kwargs.items():
  9. if v == '':
  10. artical = models.Artical.objects.all()
  11. else:
  12. artical = models.Artical.objects.filter(**kwargs)
  13. return render(request, "artical.html",
  14. {"artical_type": artical_type,
  15. "category": category,
  16. "artical": artical,})

views.py

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <style>
  7. .tag a{
  8. display: inline-block;
  9. padding: 3px 5px;
  10. border: 1px solid #dddddd;
  11. margin: 5px 5px;
  12. {#text-decoration: none;#}
  13. }
  14. .tag a.w{
  15. background: #2459a2;
  16. }
  17. </style>
  18. </head>
  19. <body>
  20. <h1>搜索条件</h1>
  21. <div class="tag">
  22. <div>
  23. {% if artical_list.artical_type_id == 0 %}
  24. <a class="w" href="/artical-0-{{ artical_list.category_id }}.html">全部</a>
  25. {% else %}
  26. <a href="/artical-0-{{ artical_list.category_id }}.html">全部</a>
  27. {% endif %}
  28. {% for row in artical_type %}
  29. {% if row.id == artical_list.artical_type_id %}
  30. <a class="w" href="/artical-{{ row.id }}-{{ artical_list.category_id }}.html">{{ row.caption }}</a>
  31. {% else %}
  32. <a href="/artical-{{ row.id }}-{{ artical_list.category_id }}.html">{{ row.caption }}</a>
  33. {% endif %}
  34. {% endfor %}
  35. </div>
  36. <div>
  37. {% if artical_list.category_id == 0 %}
  38. <a class="w" href="/artical-{{ artical_list.artical_type_id }}-0.html">全部</a>
  39. {% else %}
  40. <a href="/artical-{{ artical_list.artical_type_id }}-0.html">全部</a>
  41. {% endif %}
  42. {% for row in category %}
  43. {% if row.id == artical_list.category_id %}
  44. <a class="w" href="/artical-{{ artical_list.artical_type_id }}-{{ row.id }}}}.html">{{ row.caption }}</a>
  45. {% else %}
  46. <a href="/artical-{{ artical_list.artical_type_id }}-{{ row.id }}.html">{{ row.caption }}</a>
  47. {% endif %}
  48. {% endfor %}
  49. </div>
  50. </div>
  51. <h1>搜索结果</h1>
  52. <ul>
  53. {% for row in artical %}
  54. <li>{{ row.id }} - {{ row.title }}</li>
  55. {% endfor %}
  56. </ul>
  57.  
  58. </body>
  59. </html>

artical.html

将views.py中的python方法传递给html模板文件:

  1. from django.shortcuts import render
  2. from jax import models
  3.  
  4. def artical(request, *args, **kwargs):
  5. print(kwargs)
  6. artical_type = models.ArticalType.objects.all()
  7. category = models.Category.objects.all()
  8. for k,v in kwargs.items():
  9. kwargs[k] = int(v) # 新添加
  10. if v == '':
  11. artical = models.Artical.objects.all()
  12. else:
  13. artical = models.Artical.objects.filter(**kwargs)
  14. return render(request, "artical.html",
  15. {"artical_type": artical_type,
  16. "category": category,
  17. "artical": artical,
  18. 'artical_list': kwargs}) # 新添加

views.py

在app下新建目录templatetags(必须为这个名字),里面可以自定义文件名称,这里定义为filter.py

  1. from django import template
  2. from django.utils.safestring import mark_safe
  3. register = template.Library()
  4.  
  5. @register.simple_tag
  6. def filter_all(artical_list, k):
  7. '''
  8. {% if artical_list.artical_type_id == 0 %}
  9. <a class="w" href="/artical-0-{{ artical_list.category_id }}.html">全部</a>
  10. {% else %}
  11. <a href="/artical-0-{{ artical_list.category_id }}.html">全部</a>
  12. {% endif %}
  13. :return:
  14. '''
  15. if k == "artical_type_id":
  16. n1 = artical_list["artical_type_id"]
  17. n2 = artical_list["category_id"]
  18. if n1 == 0:
  19. ret = '<a class="w" href="/artical-0-%s.html">全部</a>' % n1
  20. else:
  21. ret = '<a href="/artical-0-%s.html">全部</a>' % n2
  22. else:
  23. n1 = artical_list["category_id"]
  24. n2 = artical_list["artical_type_id"]
  25. if n1 == 0:
  26. ret = '<a class="w" href="/artical-%s-0.html">全部</a>' % n2
  27. else:
  28. ret = '<a href="/artical-%s-0.html">全部</a>' % n2
  29. return mark_safe(ret)
  30.  
  31. @register.simple_tag
  32. def filter_artical_type(artical_type, artical_list):
  33. """
  34. {% for row in artical_type %}
  35. {% if row.id == artical_list.artical_type_id %}
  36. <a class="w" href="/artical-{{ row.id }}-{{ artical_list.category_id }}.html">{{ row.caption }}</a>
  37. {% else %}
  38. <a href="/artical-{{ row.id }}-{{ artical_list.category_id }}.html">{{ row.caption }}</a>
  39. {% endif %}
  40. {% endfor %}
  41. :return:
  42. """
  43. ret = []
  44. for row in artical_type:
  45. if row.id == artical_list["artical_type_id"]:
  46. temp = '<a class="w" href="/artical-%s-%s.html">%s</a>' % (row.id, artical_list["category_id"],row.caption)
  47. else:
  48. temp = '<a href="/artical-%s-%s.html">%s</a>' % (row.id, artical_list["category_id"], row.caption)
  49. ret.append(temp)
  50. return mark_safe(''.join(ret))
  51.  
  52. @register.simple_tag
  53. def filter_category(category, artical_list):
  54. """
  55. {% for row in category %}
  56. {% if row.id == artical_list.category_id %}
  57. <a class="w" href="/artical-{{ artical_list.artical_type_id }}-{{ row.id }}}}.html">{{ row.caption }}</a>
  58. {% else %}
  59. <a href="/artical-{{ artical_list.artical_type_id }}-{{ row.id }}.html">{{ row.caption }}</a>
  60. {% endif %}
  61. {% endfor %}
  62. :param category:
  63. :param artical_list:
  64. :return:
  65. """
  66. ret = []
  67. for row in category:
  68. if row.id == artical_list["category_id"]:
  69. temp = '<a class="w" href="/artical-%s-%s.html">%s</a>' % (artical_list["artical_type_id"], row.id, row.caption)
  70. else:
  71. temp = '<a href="/artical-%s-%s.html">%s</a>' % (artical_list["artical_type_id"], row.id, row.caption)
  72. ret.append(temp)
  73. return mark_safe(''.join(ret))

filter.py

前端html文件倒入方法,以及传递参数

  1. {% load filter %}
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8">
  6. <title>Title</title>
  7. <style>
  8. .tag a{
  9. display: inline-block;
  10. padding: 3px 5px;
  11. border: 1px solid #dddddd;
  12. margin: 5px 5px;
  13. {#text-decoration: none;#}
  14. }
  15. .tag a.w{
  16. background: #2459a2;
  17. }
  18. </style>
  19. </head>
  20. <body>
  21. <h1>搜索条件</h1>
  22. <div class="tag">
  23. <div>
  24. {% filter_all artical_list 'artical_type_id' %}
  25. {# {% if artical_list.artical_type_id == 0 %}#}
  26. {# <a class="w" href="/artical-0-{{ artical_list.category_id }}.html">全部</a>#}
  27. {# {% else %}#}
  28. {# <a href="/artical-0-{{ artical_list.category_id }}.html">全部</a>#}
  29. {# {% endif %}#}
  30. {% filter_artical_type artical_type artical_list %}
  31. {# {% for row in artical_type %}#}
  32. {# {% if row.id == artical_list.artical_type_id %}#}
  33. {# <a class="w" href="/artical-{{ row.id }}-{{ artical_list.category_id }}.html">{{ row.caption }}</a>#}
  34. {# {% else %}#}
  35. {# <a href="/artical-{{ row.id }}-{{ artical_list.category_id }}.html">{{ row.caption }}</a>#}
  36. {# {% endif %}#}
  37. {# {% endfor %}#}
  38. </div>
  39. <div>
  40. {% filter_all artical_list 'category_id' %}
  41. {# {% if artical_list.category_id == 0 %}#}
  42. {# <a class="w" href="/artical-{{ artical_list.artical_type_id }}-0.html">全部</a>#}
  43. {# {% else %}#}
  44. {# <a href="/artical-{{ artical_list.artical_type_id }}-0.html">全部</a>#}
  45. {# {% endif %}#}
  46. {% filter_category category artical_list %}
  47. {# {% for row in category %}#}
  48. {# {% if row.id == artical_list.category_id %}#}
  49. {# <a class="w" href="/artical-{{ artical_list.artical_type_id }}-{{ row.id }}}}.html">{{ row.caption }}</a>#}
  50. {# {% else %}#}
  51. {# <a href="/artical-{{ artical_list.artical_type_id }}-{{ row.id }}.html">{{ row.caption }}</a>#}
  52. {# {% endif %}#}
  53. {# {% endfor %}#}
  54. </div>
  55. </div>
  56. <h1>搜索结果</h1>
  57. <ul>
  58. {% for row in artical %}
  59. <li>{{ row.id }} - {{ row.title }}</li>
  60. {% endfor %}
  61. </ul>
  62.  
  63. </body>
  64. </html>

artical.html

转换时需要注意:

1.在app下新建的目录名字必须为templatetags。

2.html文件第一行需要添加"{% load 文件名 %}",以此来倒入自定义前端方法中的函数。

3.新建的函数文件中需要倒入模块

  1. from django import template
    from django.utils.safestring import mark_safe
    register = template.Library()
  2.  
  3. 以及需要对自定义方法添加装饰器
  1. @register.simple_tag
    def fun(*args, **kwargs):
    pass

方法二:

在templatetags目录中新建py文件,这里的"blog_left_menu.html"是另一个html模板文件

  1. from jax import models
  2. from django import template
  3.  
  4. register = template.Library()
  5.  
  6. @register.inclusion_tag("blog_left_menu.html")
  7. def function():
  8. ...

# 这里function()里面处理后数据返回仍然需要以字典形式返回给"blog_left_menu.html",直接用return返回字典即可,不需要render。

其他模板引用方法:

  1. {% load blog_left_menu %} <!--导入templatetags目录当中的文件-->
  2.  
  3. {% 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. C# Chat曲线图,在发布之后出现错误 Invalid temp directory in chart handler configuration c:\TempImageFiles\

    First error message: Invalid temp directory in chart handler configuration c:\TempImageFiles\ Soluti ...

  2. hihoCoder#1121(二分图判定)

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 大家好,我是小Hi和小Ho的小伙伴Nettle,从这个星期开始由我来完成我们的Weekly. 新年回家,又到了一年一度大龄 ...

  3. java代码swing编程 制作一个单选按钮的Frame

    不善于思考,结果费了时间,也没有效果 下面的框框可以做出来. package com.kk; import javax.swing.JFrame; import javax.swing.JLabel; ...

  4. Eclipse: “The import java.io cannot be resolved”

    检查一下选项: 重点看jdk的绑定 43down voteaccepted Check your Eclipse preferences: Java -> Installed JREs. The ...

  5. hibernate学习笔记(3)hibernate常用配置以及session对象

    更改hibernate.cfg.xml的内容,常用配置有: <!--  把hibernate运行时的SQL语句显示到控制台  --> <property name="sho ...

  6. [P4782]2-SAT问题

    解题关键:2-sat模板,tarjan解决. #include<iostream> #include<cstring> #include<cstdio> #incl ...

  7. Mybatis的批处理以及执行Update返回行数为负数

    项目中用到了批量更新. 在开发当中,可能经常会遇到批量处理这种情况,一般都再在java层面进行, 其本质是节省数据库连接打开关闭的的次数,占用更少的运行内存. 下面先记一下批处理映射吧: mybati ...

  8. Nginx 正向代理和反向代理

    正向代理的概念 正向代理,也就是传说中的代理,他的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器这个代理服务器呢,他能访问那个我不能访问的网站于是我先连上代 ...

  9. 容器控件JPanel的使用

    -----------------siwuxie095 工程名:TestUI 包名:com.siwuxie095.ui 类名:TestPanel.java 工程结构目录如下: 在默认窗体 JFrame ...

  10. c#与Java事件定义的不同

    C#: using System; using System.Collections.Generic; using System.Text; namespace Test1 { class Progr ...