【问题标题】:Insert comma between list of element在元素列表之间插入逗号
【发布时间】:2015-12-20 16:58:17
【问题描述】:

我有一个事件列表(带有链接),我想以逗号分隔的形式显示

事件1,事件2,事件3

我尝试了the solution here,但不适合我。

代码如下:

<p> 

  {% for element in event.getelement.all() %}

       <a href="{{ build_absolute_url(url('main:home_getlink',link.uri)) }}">
        {{ element }} </a> 
     {% endfor %} 
</p>

【问题讨论】:

  • 没有使用 Django 模板。您似乎在使用 Jinja2。

标签: django html django-templates


【解决方案1】:

做:

<p> 
  {% for element in event.getelement.all %}
      <a href="{{ build_absolute_url(url('main:home_getlink',link.uri)) }}">
        {{ element }}
      </a>{% if not forloop.last %}, {% endif %}
  {% endfor %} 
</p>

另外,href 是怎么回事?您没有使用命名路由,因此您可以简单地利用{% url [route-name] [params] %} 标签?

【讨论】:

  • 我添加了该部分,但它没有插入逗号:\
  • 代码不起作用的唯一方法是如果没有要迭代的元素。
  • 它说forloop是未定义的
  • 它现在正在工作。似乎 forloop.last 已更改为 loop.last
【解决方案2】:

不应该是一个函数调用,因为它在template 内部。下面改一下,

{% for element in event.getelement.all() %}

{% for element in event.getelement.all %}

然后,您发布的解决方案链接应该在那之后工作。


编辑:

如果你这样做,

{{ event.getelement.all|join:", " }}

所以这可能会产生类似的结果,

GetElement object, GetElement object, GetElement object

要获取特定属性的值,您还必须添加该属性。像这样的,

{% for e in event.getelement.all %}
    {{ e.<attr_name> }},
{% endfor %}

这可能会产生类似,

event1, event2, event3,

当然,这不是最佳解决方案,因为这不是使用任何框架时做事的正确方法。


最佳解决方案:

应该遵循的是,执行views 中的每一个逻辑,并将data 的干净(纯)形式发送到templates。我的意思是发送listsdictionariesobjectstuples 应该发送到templates。因此,创建所有事件的 list 并将其发送到 templates 虽然 context

注意:以下示例均基于假设。

查看:

def xyz(request):
    event = Event.objects.get(name='xyz')
    context = {
       'event_elements': [e.name for e in event.getelement.all()]
    }

    return render(request, 'xyz.html', context)

模板:

{{ event_elements|join:", " }}

现在这肯定会起作用

【讨论】:

  • 您可以发布您的event 模型吗?以及eventgetelement 是如何相互关联的?
  • 它抛出一个模板语法错误'异常值:预期标记'打印语句结束',得到':''
猜你喜欢
  • 2018-12-08
  • 1970-01-01
  • 1970-01-01
  • 2014-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-05
  • 1970-01-01
相关资源
最近更新 更多