<table style="height: 30px; background-color: #afeeee; width: 1266px; ; width: 1266px;" border="0">
<tr><td><span style="font-size: 16px;">一、实现方法</td>
</tr></table>
1.纯模板语言实现
2.自定义simpletag实现(本质是简化了纯模板语言的判断)
例如:路由系统中的url格式是这样:
其中article_type_id和category_id和数据库中字段是相对应的,此时当一个url为article-1-2.html时候,后台处理函数的参数将是一个字典{'article_type_id': 1,'category_id': 1},然后将该条件作为数据库查询条件,最后得出结果返回给前端
urls.py
urlpatterns =<span style="color: #000000;"> [
url(r<span style="color: #800000;">'<span style="color: #800000;">^$<span style="color: #800000;">'<span style="color: #000000;">,views.index),url(r<span style="color: #800000;">'<span style="color: #800000;">^article-(?P
models.py
caption=models.CharField(max_length=64<span style="color: #000000;">)
<span style="color: #0000ff;">class<span style="color: #000000;"> Article_type(models.Model):
caption=models.CharField(max_length=64<span style="color: #000000;">)
<span style="color: #0000ff;">class<span style="color: #000000;"> Article(models.Model):
title=models.CharField(max_length=64<span style="color: #000000;">)
content=models.CharField(max_length=256<span style="color: #000000;">)
category=models.ForeignKey(to=<span style="color: #800000;">'<span style="color: #800000;">Category<span style="color: #800000;">'<span style="color: #000000;">)
article_type=models.ForeignKey(to=<span style="color: #800000;">'<span style="color: #800000;">Article_type<span style="color: #800000;">'
views.py
html模板
<span style="background-color: #f5f5f5; color: #000000;">}</span>
<span style="color: #0000ff;"></</span><span style="color: #800000;">style</span><span style="color: #0000ff;">></span>
<span style="color: #0000ff;"></
<span style="color: #800000;">head<span style="color: #0000ff;">><span style="color: #0000ff;"><<span style="color: #800000;">body<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">h1<span style="color: #0000ff;">>搜索条件<span style="color: #0000ff;"></<span style="color: #800000;">h1<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">div <span style="color: #ff0000;">class<span style="color: #0000ff;">="container"<span style="color: #0000ff;">><span style="color: #000000;">
{% if article_arg.article_type_id == 0 %}
<span style="color: #0000ff;"><<span style="color: #800000;">a <span style="color: #ff0000;">class<span style="color: #0000ff;">="active"<span style="color: #ff0000;"> href<span style="color: #0000ff;">="/cmdb/article-0-{{ article_arg.category_id }}.html"<span style="color: #0000ff;">>全部<span style="color: #0000ff;"></<span style="color: #800000;">a<span style="color: #0000ff;">><span style="color: #000000;">
{% else %}
<span style="color: #0000ff;"><<span style="color: #800000;">a <span style="color: #ff0000;">href<span style="color: #0000ff;">="/cmdb/article-0-{{ article_arg.category_id }}.html"<span style="color: #0000ff;">>全部<span style="color: #0000ff;"></<span style="color: #800000;">a<span style="color: #0000ff;">><span style="color: #000000;">
{% endif %}
{% for row in article_type %}
{% if row.id == article_arg.article_type_id %}
<span style="color: #0000ff;"><<span style="color: #800000;">a <span style="color: #ff0000;">class<span style="color: #0000ff;">="active"<span style="color: #ff0000;"> href<span style="color: #0000ff;">="/cmdb/article-{{ row.id }}-{{ article_arg.category_id }}.html"<span style="color: #0000ff;">>{{ row.caption }}<span style="color: #0000ff;"></<span style="color: #800000;">a<span style="color: #0000ff;">><span style="color: #000000;">
{% else %}
<span style="color: #0000ff;"><<span style="color: #800000;">a <span style="color: #ff0000;">href<span style="color: #0000ff;">="/cmdb/article-{{ row.id }}-{{ article_arg.category_id }}.html"<span style="color: #0000ff;">>{{ row.caption }}<span style="color: #0000ff;"></<span style="color: #800000;">a<span style="color: #0000ff;">><span style="color: #000000;">
{% endif %}
{% endfor %}
<span style="color: #0000ff;"></<span style="color: #800000;">div<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">div <span style="color: #ff0000;">class<span style="color: #0000ff;">="container"<span style="color: #0000ff;">><span style="color: #000000;">
{% if article_arg.category_id == 0 %}
<span style="color: #0000ff;"><<span style="color: #800000;">a <span style="color: #ff0000;">class<span style="color: #0000ff;">="active"<span style="color: #ff0000;"> href<span style="color: #0000ff;">="/cmdb/article-{{ article_arg.article_type_id }}-0.html"<span style="color: #0000ff;">>全部<span style="color: #0000ff;"></<span style="color: #800000;">a<span style="color: #0000ff;">><span style="color: #000000;">
{% else %}
<span style="color: #0000ff;"><<span style="color: #800000;">a <span style="color: #ff0000;">href<span style="color: #0000ff;">="/cmdb/article-{{ article_arg.article_type_id }}-0.html"<span style="color: #0000ff;">>全部<span style="color: #0000ff;"></<span style="color: #800000;">a<span style="color: #0000ff;">><span style="color: #000000;">
{% endif %}
{% for row in article_category %}
{% if row.id == article_arg.category_id %}
<span style="color: #0000ff;"><<span style="color: #800000;">a <span style="color: #ff0000;">class<span style="color: #0000ff;">="active"<span style="color: #ff0000;"> href<span style="color: #0000ff;">="/cmdb/article-{{ article_arg.article_type_id }}-{{ row.id }}.html"<span style="color: #0000ff;">>{{ row.caption }}<span style="color: #0000ff;"></<span style="color: #800000;">a<span style="color: #0000ff;">><span style="color: #000000;">
{% else %}
<span style="color: #0000ff;"><<span style="color: #800000;">a <span style="color: #ff0000;">href<span style="color: #0000ff;">="/cmdb/article-{{ article_arg.article_type_id }}-{{ row.id }}.html"<span style="color: #0000ff;">>{{ row.caption }}<span style="color: #0000ff;"></<span style="color: #800000;">a<span style="color: #0000ff;">><span style="color: #000000;">
{% endif %}
{% endfor %}
<span style="color: #0000ff;"></<span style="color: #800000;">div<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">h1<span style="color: #0000ff;">>查询结果<span style="color: #0000ff;"></<span style="color: #800000;">h1<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">div<span style="color: #0000ff;">><span style="color: #000000;">
{% for row in aritcle %}
<span style="color: #0000ff;"><<span style="color: #800000;">div<span style="color: #0000ff;">>{{ row.id }}-{{ row.title }}<span style="color: #0000ff;"></<span style="color: #800000;">div<span style="color: #0000ff;">><span style="color: #000000;">
{% endfor %}
<span style="color: #0000ff;"></<span style="color: #800000;">div<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">body<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">html<span style="color: #0000ff;">>
方法二:使用simpletag实现
myfilter.py
@register.simple_tag
<span style="color: #0000ff;">def<span style="color: #000000;"> filter_all(article_arg,condition):
<span style="color: #800000;">'''<span style="color: #800000;">
处理条件为全部
:param article_arg: 当前url字典:如{'article_type_id': 1,'category_id': 1}
:param condition: 要处理的条件,如article_type_id,用于区分当前处理选择了那个全部
:return: 返回下面页面形式
{% if article_arg.article_type_id == 0 %}
<a class="active" href="/cmdb/article-0-{{ article_arg.category_id }}.html">全部
{% else %}
<a href="/cmdb/article-0-{{ article_arg.category_id }}.html">全部
{% endif %}
{% for row in article_type %}
{% if row.id == article_arg.article_type_id %}
<a class="active" href="/cmdb/article-{{ row.id }}-{{ article_arg.category_id }}.html">{{ row.caption }}
{% else %}
<a href="/cmdb/article-{{ row.id }}-{{ article_arg.category_id }}.html">{{ row.caption }}
{% endif %}
{% endfor %}
<span style="color: #800000;">'''
<span style="color: #0000ff;">if condition==<span style="color: #800000;">'<span style="color: #800000;">article_type_id<span style="color: #800000;">'<span style="color: #000000;">:
<span style="color: #0000ff;">if article_arg[condition]==<span style="color: #000000;">0:
<span style="color: #0000ff;">print(article_arg[<span style="color: #800000;">'<span style="color: #800000;">category_id<span style="color: #800000;">'<span style="color: #000000;">])
res= <span style="color: #800000;">'<span style="color: #800000;"><a class ="active" href="/cmdb/article-0-%s.html">全部<span style="color: #800000;">' % article_arg[<span style="color: #800000;">'<span style="color: #800000;">category_id<span style="color: #800000;">'<span style="color: #000000;">]
<span style="color: #0000ff;">else<span style="color: #000000;">:
res = <span style="color: #800000;">'<span style="color: #800000;"><a href="/cmdb/article-0-%s.html">全部<span style="color: #800000;">' % article_arg[<span style="color: #800000;">'<span style="color: #800000;">category_id<span style="color: #800000;">'<span style="color: #000000;">]
<span style="color: #0000ff;">return<span style="color: #000000;"> mark_safe(res)
<span style="color: #0000ff;">elif condition==<span style="color: #800000;">'<span style="color: #800000;">category_id<span style="color: #800000;">'<span style="color: #000000;">:
<span style="color: #0000ff;">if article_arg[<span style="color: #800000;">'<span style="color: #800000;">category_id<span style="color: #800000;">']==<span style="color: #000000;">0:
res = <span style="color: #800000;">'<span style="color: #800000;"><a class ="active" href="/cmdb/article-%s-0.html">全部<span style="color: #800000;">' % article_arg[<span style="color: #800000;">'<span style="color: #800000;">article_type_id<span style="color: #800000;">'<span style="color: #000000;">]
<span style="color: #0000ff;">else<span style="color: #000000;">:
res = <span style="color: #800000;">'<span style="color: #800000;"><a href="/cmdb/article-%s-0.html">全部<span style="color: #800000;">' % article_arg[<span style="color: #800000;">'<span style="color: #800000;">article_type_id<span style="color: #800000;">'<span style="color: #000000;">]
<span style="color: #0000ff;">return<span style="color: #000000;"> mark_safe(res)
@register.simple_tag
<span style="color: #0000ff;">def<span style="color: #000000;"> filter_type(article_type,article_arg):
<span style="color: #800000;">'''<span style="color: #800000;">
:param article_type: article_type对象
:param article_arg: 当前url字典
:return:
{% for row in article_type %}
{% if row.id == article_arg.article_type_id %}
<a class="active" href="/cmdb/article-{{ row.id }}-{{ article_arg.category_id }}.html">{{ row.caption }}
{% else %}
<a href="/cmdb/article-{{ row.id }}-{{ article_arg.category_id }}.html">{{ row.caption }}
{% endif %}
{% endfor %}
<span style="color: #800000;">'''<span style="color: #000000;">
res=<span style="color: #000000;">[]
<span style="color: #0000ff;">for row <span style="color: #0000ff;">in<span style="color: #000000;"> article_type:
<span style="color: #0000ff;">if row.id== article_arg[<span style="color: #800000;">'<span style="color: #800000;">article_type_id<span style="color: #800000;">'<span style="color: #000000;">]:
temp=<span style="color: #800000;">'<span style="color: #800000;"><a class="active" href="/cmdb/article-%s-%s.html">%s<span style="color: #800000;">' %(row.id,article_arg[<span style="color: #800000;">'<span style="color: #800000;">category_id<span style="color: #800000;">'<span style="color: #000000;">],row.caption)
<span style="color: #0000ff;">else<span style="color: #000000;">:
temp = <span style="color: #800000;">'<span style="color: #800000;"><a href="/cmdb/article-%s-%s.html">%s<span style="color: #800000;">' % (row.id,row.caption)
res.append(temp)
<span style="color: #0000ff;">return mark_safe(<span style="color: #800000;">""<span style="color: #000000;">.join(res))
@register.simple_tag
<span style="color: #0000ff;">def<span style="color: #000000;"> filter_category(article_category,article_arg):
<span style="color: #800000;">'''<span style="color: #800000;">
:param article_type: article_category对象
:param article_arg: 当前url字典
:return:
{% for row in article_category %}
{% if row.id == article_arg.category_id %}
<a class="active" href="/cmdb/article-{{ article_arg.article_type_id }}-{{ row.id }}.html">{{ row.caption }}
{% else %}
<a href="/cmdb/article-{{ article_arg.article_type_id }}-{{ row.id }}.html">{{ row.caption }}
{% endif %}
{% endfor %}
<span style="color: #800000;">'''<span style="color: #000000;">
res=<span style="color: #000000;">[]
<span style="color: #0000ff;">for row <span style="color: #0000ff;">in<span style="color: #000000;"> article_category:
<span style="color: #0000ff;">if row.id== article_arg[<span style="color: #800000;">'<span style="color: #800000;">category_id<span style="color: #800000;">'<span style="color: #000000;">]:
temp=<span style="color: #800000;">'<span style="color: #800000;"><a class="active" href="/cmdb/article-%s-%s.html">%s<span style="color: #800000;">' %(article_arg[<span style="color: #800000;">'<span style="color: #800000;">article_type_id<span style="color: #800000;">'<span style="color: #000000;">],row.id,row.caption)
<span style="color: #0000ff;">else<span style="color: #000000;">:
temp = <span style="color: #800000;">'<span style="color: #800000;"><a href="/cmdb/article-%s-%s.html">%s<span style="color: #800000;">' % (article_arg[<span style="color: #800000;">'<span style="color: #800000;">article_type_id<span style="color: #800000;">'<span style="color: #000000;">],row.caption)
res.append(temp)
<span style="color: #0000ff;">return mark_safe(<span style="color: #800000;">"".join(res))
html模板
<span style="background-color: #f5f5f5; color: #000000;">}</span>
<span style="color: #0000ff;"></</span><span style="color: #800000;">style</span><span style="color: #0000ff;">></span>
<span style="color: #0000ff;"></
<span style="color: #800000;">head<span style="color: #0000ff;">><span style="color: #0000ff;"><<span style="color: #800000;">body<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">h1<span style="color: #0000ff;">>搜索条件<span style="color: #0000ff;"></<span style="color: #800000;">h1<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">div <span style="color: #ff0000;">class<span style="color: #0000ff;">="container"<span style="color: #0000ff;">><span style="color: #000000;">
{% filter_all article_arg 'article_type_id' %}
{% filter_type article_type article_arg %}
<span style="color: #0000ff;"></<span style="color: #800000;">div<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">div <span style="color: #ff0000;">class<span style="color: #0000ff;">="container"<span style="color: #0000ff;">><span style="color: #000000;">
{% filter_all article_arg 'category_id' %}
{% filter_category article_category article_arg %}
<span style="color: #0000ff;"></<span style="color: #800000;">div<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">h1<span style="color: #0000ff;">>查询结果<span style="color: #0000ff;"></<span style="color: #800000;">h1<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">div<span style="color: #0000ff;">><span style="color: #000000;">
{% for row in aritcle %}
<span style="color: #0000ff;"><<span style="color: #800000;">div<span style="color: #0000ff;">>{{ row.id }}-{{ row.title }}<span style="color: #0000ff;"></<span style="color: #800000;">div<span style="color: #0000ff;">><span style="color: #000000;">
{% endfor %}
<span style="color: #0000ff;"></<span style="color: #800000;">div<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">body<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">html<span style="color: #0000ff;">>
ps附上简图:
1.model定义
2.处理函数变化
3.simpletag相应改变