注册 一个。
{% endif %}翻看用户的方法和模板的一些控制语句。找到了user.is_staff和ifnotequal两个很有用的东东。通过一些逻辑组合,就变成了如下的代码,实现了当用户未登录时显示请登录,登陆后如果是普通用户,在指定的父节点下,则不显示发帖框,如果是管理员则显示。
is_staff()可以判断用户是否可以登录后台
{% if user.is_authenticated %}
{% if user.is_staff %}
{% csrf_token %}
{% for field in form %}
{{ field.label_tag }}
{{ field }}
{% endfor %}
{% else %}
{% ifnotequal node.category.name '父节点名称' %}
{% csrf_token %}
{% for field in form %}
{{ field.label_tag }}
{{ field }}
{% endfor %}
{% endifnotequal %}
{% endif %}
{% else %}
您需要 登录 来发表新话题。没有账号,马上 注册 一个。
{% endif %}
这样,templates部分的node.html模板功能就实现了。(这是点击节点后的显示模板)
还有一部分是首页index.html,主界面的部分也需要修改,因为原先有热门话题模块,所以可以很方便的拿来修改。
{% if special_topics %}
专题
{% for item in special_topics %}
{{item.title}}
{% endfor %}
{% endif %}
上面原本的hot_topics已经被我替换成special_topics,至于这个special_topics,就需要使用views视图来定义了。
打开site目录的views模块。看见如下的一些代码:
hot_topics = Topic.objects.filter(created_on__range=[from_date, time_now]).order_by('-num_replies')[:10]
context['hot_topics'] = hot_topics
hot_nodes = Node.objects.filter(num_topics__gt=0,updated_on__gt=from_date).order_by('-updated_on')[:10]
context['hot_nodes'] = hot_nodes
return render(request,'index.html',context)
这样,通过定义context处理器实现了替换,只需要添加special_topics变量即可。获取指定的节点的数据。在模板中就可以显示了。
在Topic类下有node变量,外键是Node主题帖的节点,Node中有slug属性。这样就可以过滤出节点slug为“zt”的节点的所有主题帖。添加如下代码。
special_topics = Topic.objects.filter(node__slug__iexact="zt").order_by('-num_replies')[:10]
context['special_topics'] = special_topics
OK,使用管理员登陆,发帖,刷新,首页出现了“专题”模块。
————————-
吐槽:某度的搜索真心浪费时间,最开始使用node.slug出错,想找找使用外键的例子。就是出不来。
最后使用了基于Google的一个搜索,马上发现node.slug应该写成node__slug。纠结了好半天!
分享文章:为Pythonic论坛添加一个“专题”功能-创新互联
转载注明:http://cdiso.cn/article/dggjhs.html