【问题标题】:combining two arrays in Django在 Django 中组合两个数组
【发布时间】:2022-09-27 15:42:39
【问题描述】:

我正在开发一个显示帖子的网络(如 twitter)。在 Django views.py 中,我编写了一个创建两个数组的代码,并分配了要在 HTML 模板中使用的数组。 视图.py:

def arrays(request):
    allposts = posts.objects.all()
    m = [\'empty\', \'like\', \'unlike\', \'like\', \'unlike\']
    aa = [0, 1, 2, 3, 4]
    return render(request,  \"network/index.html\" ,{\'allposts\': allposts, \'m\':m, \'aa\':aa})

(m) 数组表示每个帖子是否被点赞(数组中的每个对象的排列方式与帖子 id 相同),而 (aa) 表示数据库中每个帖子的 id

在 index.html 中,我想根据数组中的排列为每个帖子显示 \'like\' 或 \'unlike\'。

在 index.html 中

{% for post in allposts %}
    <div>
    {% for object in aa %}
    {% if object == post.id %}
    <p>{{m.object}}</p>
    {% endif %}
    {% endfor %}

   
    </div>
    {%endfor %}
 

但问题是我无法匹配 HTML 模板中的 aa 数组和 m 数组,但我可以显示 {{m.1}} 而不是 {{m.object}}。那么我怎样才能匹配这两个数组呢?

    标签: python html arrays django web


    【解决方案1】:

    我不确定这里的“匹配”和“安排”是什么意思。如果我不回答您的问题,请详细说明您要完成的工作。

    问题是我无法匹配 HTML 模板中的 aa 数组和 m 数组

    这是含糊的,但建议您要将 m 中的某些元素附加到 aa 中的某些元素。我建议像字典一样以组合方式发送数据

    new_m = {a: m[a] for a in aa}
    

    在 index.html 中,我想根据数组中的排列为每个帖子显示“喜欢”或“不喜欢”

    这也有点模糊,但建议您要根据 aa 订购 m。下面是你将如何做到这一点:

    m = [x for x,_ in sorted(zip(m, aa)]
    

    最后,我对模板中的这一行更加困惑:{% if object == post.id %} 因为它只会在前 5 个帖子中显示您的喜欢、不喜欢和其他选项。

    【讨论】:

    • 这也很好用
    • 其实这点我还没有解释清楚,我把所有的帖子都放在模板HTML里,把每一个帖子都显示在一个<div>里面,而且每个div里面都有一个like按钮,好像帖子被点赞了的内部内容如果用户单击该按钮,则该按钮(与该按钮不同)取消该按钮,反之亦然。所以我有一个数组,我想将它与每个帖子的 id 连接起来
    【解决方案2】:

    有几种方法可以做到这一点。我将使用 ID 列表过滤您的结果并对其进行排序,使其与您的 aa 列表具有相同的顺序。然后使用zip

    def arrays(request):
        aa = [0, 1, 2, 3, 4]
        filtered_posts = posts.objects.filter(id__in=aa).order_by("id")
        m = ['empty', 'like', 'unlike', 'like', 'unlike']
        posts_m_mapping = zip(filtered_posts, m)
    
        return render(request,  "network/index.html" ,{'posts_m_mapping': posts_m_mapping})
    

    在您的模板中,只需遍历 posts_m_mapping

    {% for post, sentiment in posts_m_mapping %}
       ...
    {%endfor %}
    

    编辑

    如果您想将所有帖子和情绪放在同一个地方,我建议首先使用 dict 来映射 ID 和情绪:

    aa_m_mapping = { id: sentiment for id, sentiment in zip(aa, m)}
    posts = posts.objects.all()
    posts_and_sentiments = (post, aa_m_mapping.get(post.id)) for post in posts
    

    然后在您的模板中:

    {% for post, sentiment in posts_and_sentiments %}
       ...
    {%endfor %}
    
    

    对于不在aa 中的帖子,情绪将为无。

    【讨论】:

    • 我想你可能比我更清楚地知道 OP 想要什么 +1
    • 其实这点我还没有解释清楚,我把所有的帖子都放在模板HTML里,把每一个帖子都显示在一个<div>里面,而且每个div里面都有一个like按钮,好像帖子被点赞了的内部内容如果用户单击该按钮,则该按钮(与该按钮不同)取消该按钮,反之亦然。所以我有一个数组,我想将它与每个帖子的 id 连接起来
    • @MostafaMohamed 我编辑了回复以反映您的评论
    猜你喜欢
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多