【问题标题】:How to use array from python to javascript? Django如何使用从 python 到 javascript 的数组?姜戈
【发布时间】:2021-08-10 21:52:40
【问题描述】:

在你说它的重复之前! 我知道如何在视图中使用 dump() 进行解析,但现在我想从自定义模板标签接收到 JavaScript 的字典数组。

这是在我的 custom_template.py 中

@register.simple_tag(takes_context = True)
def messageRequest(context):
    request = context['request']
    messageData = Message.objects.all()
    jsMessageData = []
    if 'user' in request.COOKIES:
        currentUser = request.COOKIES.get('user')
    i = 0
    for i in range(messageData):
        if messageData[i].receiver == currentUser:
            jsMessageData.append(messageData[i])
        if messageData[i].sender == currentUser:
            jsMessageData.append(messageData[i])
        i += 1

    print(jsMessageData)
    return dumps(jsMessageData)

对于我的模板 index.html,我想在 JavaScript 中使用它来显示消息- 我试过这个

messageData = Json.parse("{% messageRequest %}"); 
// i want to store it as array
// throws error "'QuerySet' object cannot be interpreted as an integer" when looping through it

还有,

messageData = Json.parse("{% messageRequest|escapejs %}");
// i read this somewhere and it works fine when array is passed through render request but here it gives error as it considers escapejs as part of block tag.

感谢任何帮助,我是初学者,所以请尝试给出全面的解释,一个示例将非常有帮助。

编辑:这是我的模型-

class Message(models.Model):
    sender = models.CharField(max_length=100)
    receiver = models.CharField(max_length=100)
    message = models.CharField(max_length=100)
    time = models.CharField(max_length=100, null=True)
    def __str__(self):
        return (self.sender + '-' + self.receiver)

我在一些事情上取得了进步,你可以检查问题here

【问题讨论】:

  • 是否有理由检查当前用户的发送者和接收者并将其附加到同一个列表中。我的问题是你想要发送者和接收者数据在同一个列表中吗,你能分享你的Message Model
  • 实际上保留发件人的姓名很重要,因为它与邮件相关联。您可以将其视为我需要发件人姓名的聊天应用程序。如果我从数组中删除接收器实际上并不重要,因为它们是作为字典传入的

标签: python django parsing django-templates templatetags


【解决方案1】:
@register.simple_tag(takes_context = True)
def messageRequest(context):
    request = context['request']
    if 'user' in request.COOKIES:
        currentUser = request.COOKIES.get('user')
    messageData = [Message.objects.filter(sender=currentUser).values()]
    return messageData

你也可以使用@login_required装饰器只允许登录用户访问视图,然后你可以访问current_user = request.user

在你的模板中你应该添加

message_data = {{ message_data | safe }}

您必须在视图操作系统的上下文中传递message_data,才能在模板中访问它。

您可以使用 vanilla javascript 或使用 Jquery 执行过滤器等操作。

【讨论】:

  • 谢谢,但关键是我如何在 javascript 中调用它导致它给我错误。对于过滤器,我需要同时检查 - 当前用户是发送者还是接收者。
  • 我已经更新了答案。 upu需要在你的模板中添加message_data = {{ message_data | safe }}才能访问message_data
  • 我认为你错了,我没有选择通过视图传递它,这就是我创建标签的原因。而对于使用标签语法就像 {% functionname %} 我不能使用 |使用它是安全的,否则它会抛出未定义的错误。
猜你喜欢
  • 2011-01-27
  • 2020-10-18
  • 2020-08-17
  • 2021-08-11
  • 2015-07-18
  • 2021-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多