首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django简单标记在if条件下不起作用

Django简单标记在if条件下不起作用
EN

Stack Overflow用户
提问于 2016-09-18 19:00:37
回答 1查看 756关注 0票数 0

我想自定义django-admin的视频对象的更改表单添加块与审查工具。

当我在if条件中使用自定义simpletags时-它不起作用。

models.py:

代码语言:javascript
复制
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)

模板标记video_publication_statuses.py:

代码语言:javascript
复制
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:

代码语言:javascript
复制
{% 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 %}

当我使用显式的值而不是标记时,它是有效的:

代码语言:javascript
复制
  {% if original.publication_status == 3 %}
    <input type="submit" value="Reject" name="reject" >
  {% endif %}

请告诉我标签出了什么问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-18 20:25:17

我相信这种情况的发生是因为模板标签传递字符串,而您正在根据整数检查字符串,例如return "3" == 3

不过从广义上讲,您在模板中放入了很多逻辑,我通常会避免这种情况。模板标记是为“表示逻辑”保留的,我将其理解为“改变事物呈现的方式”,而不是改变查看的内容。该逻辑属于视图或模型本身。

把这个逻辑放在你的模型上应该很容易。

代码语言:javascript
复制
class Original(...):
  def rejected(self):
    return self.status == Video.rejected      
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39556917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档