使用模板标签循环遍历 django 中的对象不起作用

Posted

技术标签:

【中文标题】使用模板标签循环遍历 django 中的对象不起作用【英文标题】:loop through objects in django using template tags is not working 【发布时间】:2021-03-19 13:05:32 【问题描述】:

我有一个名为 Operation 的模型

class Operation(models.Model):
    title = models.CharField(max_length=255)
    title_tag = models.CharField(max_length=120, default='Medicine')
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    body = models.TextField()
    img = models.ImageField(upload_to='media', null = True)
    date = models.DateTimeField(auto_now_add=True)

def __str__(self):
    return self.title + ' | ' + str(self.author)

def get_absolute_url(self):
    return reverse('home')

和看起来像这样的views.py

def Operation(request):
    return render(request, 'operation.html')

class OperationView(ListView):
    object_context_name = 'operation'
    model = Operation
    template_name = 'operation.html'

class OperationDetailView(DetailView):
    model = Operation
    template_name= 'operation_details.html'

渲染所有操作的Listview的html页面如下

% for operation in object_list %
<article>
    <a href="% url 'operation-detail' operation.pk %" class="image"><img src="post.image"  /></a>
    <h3>operation.title</h3> <br>
    <h6> operation.author</h6> <br>

    <p>operation.body | slice:":200"</p>
    <ul class="actions">
        <li><a href="% url 'operation-detail' operation.pk %" class="button">More</a></li>
    </ul>
</article>
% endfor %

但是它不起作用或在页面上呈现任何操作文章。有什么帮助吗?

【问题讨论】:

【参考方案1】:

如果你删除你的 context_object_name 你的循环将起作用。但是,如果您想使用该 context_object_name,您可以将循环编辑为:

% for operations in operation %

更多信息:docs

【讨论】:

【参考方案2】:

这是因为您重命名了上下文对象的名称,要么删除它,要么使用 %for operation in operations%

【讨论】:

以上是关于使用模板标签循环遍历 django 中的对象不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Django模板ifequal标签

Django:遍历模板中的过滤列表

如何在返回的 AJAX 调用上使用 django 模板标签?

25Django for标签详解

django模板标签运行循环不是所有对象[重复]

尝试遍历 django 模板中的嵌套字典