Django的简单标签,如果条件不起作用 [英] Django simple tag doesn't work in if condition
问题描述
我想通过使用审核工具添加块来为视频对象定制django-admin的更改形式。
I want to customize django-admin's change form for video objects by adding block with moderation tools.
当我在条件中使用自定义simpletag时,它不会工作。
When I use custom simpletags in if condition - it doesn't work.
models.py:
models.py:
class Video(models.Model):
class Meta:
db_table = 'video'
DRAFT = 1
MODERATION = 2
PUBLISHED = 3
REJECTED = 4
HOSTING_UPLOADING = 5
SUSPICIOUS = 6
PUBLICATION_STATUSES = (
(DRAFT, 'draft'),
(MODERATION, 'moderation'),
(PUBLISHED, 'published'),
(HOSTING_UPLOADING, 'hosting uploading'),
(REJECTED, 'rejected'),
(SUSPICIOUS, 'suspicious')
)
video_pk = models.AutoField(primary_key=True)
name = models.CharField(max_length=150, blank=True)
hosting_id = models.CharField(max_length=20, blank=True)
publication_status = models.PositiveSmallIntegerField(choices=PUBLICATION_STATUSES, default=MODERATION)
templatetags video_publication_statuses.py:
templatetags video_publication_statuses.py:
from api.models import Video
from django import template
register = template.Library()
@register.simple_tag
def moderation(status):
return status == Video.MODERATION
@register.simple_tag
def suspicious(status):
return status == Video.SUSPICIOUS
@register.simple_tag
def published(status):
return status == Video.PUBLISHED
@register.simple_tag
def hosting_uploading(status):
return status == Video.HOSTING_UPLOADING
@register.simple_tag
def rejected(status):
return status == Video.REJECTED
change_form.html:
change_form.html:
{% extends "admin/change_form.html" %}
{% load video_publication_statuses %}
{% suspicious original.publication_status as suspicious_status %}
{% moderation original.publication_status as moderation_status %}
{% hosting_uploading original.publication_status as hosting_uploading_status %}
{% published original.publication_status as published_status %}
{% rejected original.publication_status as rejected_status %}
{% block after_related_objects %}
{% if original.pk %}
{% for fieldset in adminform %}
{% if fieldset.name == 'Moderation' %}
{% include "admin/includes/fieldset.html" %}
{% endif %}
{% endfor %}
<div class="submit-row">
{% if rejected_status or moderation_status or suspicious_status %}
<input type="submit" value="Publish" name="publish" >
{% endif %}
{% if published_status %}
<input type="submit" value="Reject" name="reject" >
{% endif %}
</div>
{% endif %}
{% endblock %}
当我使用
{% if original.publication_status == 3 %}
<input type="submit" value="Reject" name="reject" >
{% endif %}
请帮助我了解标记有什么问题?
Please help me understand what is wrong with tags?
推荐答案
我相信这是因为模板标记会传递字符串,而您正在针对整数检查字符串,例如返回 3 == 3
I believe this is happening because template tags pass strings and you're checking a string against an integer e.g. return "3" == 3
虽然从广义上讲,您在模板中放置了很多逻辑而且我通常会避免这种情况。模板标记是为表示逻辑保留的,我的意思是改变某种呈现方式,而不是改变查看的内容。该逻辑属于视图或模型本身。
Broadly speaking though, you're putting a lot of logic in a template and I typically avoid that situation. Template tags are reserved for "presentation logic" and I take that to mean "changing the way something is presented", not changing what is viewed. That logic belongs in a view or the model itself.
将这种逻辑应用于模型应该很容易。
It should be easy enough to put this logic on your model.
class Original(...):
def rejected(self):
return self.status == Video.rejected
这篇关于Django的简单标签,如果条件不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!