【问题标题】:Django template tags conditionalsDjango 模板标记条件
【发布时间】:2020-09-27 14:08:09
【问题描述】:

是的,在尝试通过模板视图呈现一些逻辑时,我正在努力使用我的博客应用程序。所以这个想法是为没有发布帖子的新认证用户呈现一次性按钮,并且在用户发布其第一篇帖子后,该按钮将在 for 循环中呈现,因此他/她将能够从那里创建/删除一个新的。

views.py

@login_required(login_url='app_users:login')
@allowed_users(allowed_roles=['admin', 'staff', 'users'])
def blog(request):
    posts = BlogPost.objects.all().order_by('date_posted')
    context = {'title': 'Blog', 'posts': posts}
    return render(request, 'app_blog/blog.html', context)

models.py

class BlogPost(models.Model):
    title = models.CharField(max_length=100, null=True)
    content = models.TextField(null=True)
    date_posted = models.DateTimeField(default=timezone.now, null=True, blank=True)
    author = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return self.title

blog.html

    {% block content %}
    
        {% if request.user not in posts|last %}
            <div class="container" style="float: left;">
                <a class="btn btn-primary btn-sm mt-1 mb-1" href="{% url 'app_blog:blog_create' user.id %}"><h5>C'mon {{ request.user.username }}, don't be shy! Create Your First Blog Post!</h5></a>
            </div>
        {% endif %}
        <br>
        <br>
        {% for post in posts %}
        <br>
            <div class="container">
                <article class="media content-section">
                    <img class="rounded-circle account-img" src="{{ post.author.profile.image.url }}" alt="Image could not be uploaded!">
                    <div class="card-body media-body">
                        <div class="article-metadata">
                            <a class="mr-2" href="{% url 'app_blog:blog_user_detail' post.id %}">{{ post.author }}</a>
                            <small class="text-muted">{{ post.date_posted|date:"d F Y" }}</small>
                        </div>
                        <div class="article-metadata">
                            {% if post.author == request.user %}
                                <div>
                                    <a class="btn btn-primary btn-sm mt-1 mb-1" href="{% url 'app_blog:blog_create' post.id %}">Create New Post</a>
                                    <a class="btn btn-primary btn-danger btn-sm mt-1 mb-1" href="{% url 'app_blog:blog_delete' post.id %}">Delete</a>
                                </div>
                            {% endif %}
                        </div>
                        <h2><a class="article-title" href="{% url 'app_blog:blog_detail' post.id %}">{{ post.title }}</a></h2>
                        <p class="article-content">{{ post.content|safe }}</p>
                    </div>
                </article>
            </div>
        <br>
        {% endfor %}
    
    {% endblock %}

所以,最后的问题还是关于在这里使用什么样的条件:

{% if request.user not in posts|last %}

谢谢。

【问题讨论】:

    标签: django django-templates django-template-filters


    【解决方案1】:

    不太确定我是否完全理解,但我会提出一些建议。已保存帖子的用户不应该看到该按钮吗?如果是这样,也许这样的事情会起作用:

    {% if request.user not in posts.authors.all %}
    

    EDIT 原始解决方案不起作用。 posts 是一个查询集对象

    views.py

    @login_required(login_url='app_users:login')
    @allowed_users(allowed_roles=['admin', 'staff', 'users'])
    def blog(request):
        posts = BlogPost.objects.all().order_by('date_posted')
        new_user = len(posts.filter(author=request.user)) == 0
        context = {'title': 'Blog', 'posts': posts, 'new_user': new_user}
        return render(request, 'app_blog/blog.html', context)
    

    blog.html(只是条件)

    {% if new_user %}
    

    【讨论】:

    • 是的,你知道了……但它似乎仍然不想渲染……
    • 所以要清楚,整个模板正在为按钮渲染?
    • 对不起,我会修改我原来的答案
    • 'User' object is not iterable ...也尝试了您的行的变体,但不幸的是我又遇到了同样的错误...
    • 我觉得很傻,应该是new_user = len(posts.filter(author=request.user)) == 0,再次编辑我的答案
    猜你喜欢
    • 2013-04-23
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 2018-08-14
    • 1970-01-01
    • 2011-02-04
    • 2021-10-08
    相关资源
    最近更新 更多