Как прилагать переменные в одном сдержись Джанго используя tags

Я звоню во мне сдержись в несколько переменных:

<p> {{ area.id }}  {{ area.departamento }} {{ area.encargado }} {{ area.descripcion }} </p>

То, что я хочу сделать, состоит в том, чтобы прилагать их в единственной переменной и считать число символов для того, чтобы, если он превосходит определенное число, которое он распределял бы ему, он смог показывать его цепи, что он был отрезан даже там и не показал больше.

1
задан 18.01.2016, 00:04
3 ответа

Докуда я это знаю не возможно делать, что ты можешь делать, состоит в том, чтобы возвращать цепь с твоей модели используя функцию __str__ или создавая функцию внутри этой модели, например full_information что возвратил переменную типа string что содержал информацию.

Из шаблона ты звонишь в эту функцию с оператором .а именно area.full_information, и потом, если ты применяешь соответствующие этикетки, в которых ты нуждаешься, чтобы отсекать цепь.

Например:

class area(models.Model):
    def get_full_information(self):
        return '%s %s %s ... %s' % (self.id, self.area, ... , self.descripcion)

Поскольку ты можешь видеть здесь, - функция, ты получишь candena, что concantena все поля, которые ты поместишь в нее.

Когда ты пойдешь в твой шаблон, просто ты должен помещать {{ area.get_full_information }} и с этим это будет достаточно, эта цепь ты можешь отсекать ее с tags, которые ты хочешь, те, что используются для этого, и я заношу в список. Ты получаешь полезную функцию в любом случае.

4
ответ дан 24.11.2019, 14:59
  • 1
    Привет, я думаю, что лучшее, что ты можешь делать, состоит в том, чтобы давать пример, на котором ты описал – César 18.01.2016, 00:05
  • 2
    Привет @salahaddhin, спасибо за твой ответ, оно я функционировало:) – Angie Alejo 18.01.2016, 17:30

Существует один сдержись tag названный add но что возможно не функционировал, как ты захотел, если ты перемешиваешь целые числа и цепи:

{{ "!Hola, "|add:"Angie!" }} # Resultado: "!Hola, Angie!"
{{ 5|add:10 }} # Resultado: 15
{{ 5|add:"xyz" }} # Resultado: ""

Он не является рекомендуемым в твоем случае. То, что ты можешь пробовать, состоишь в том, чтобы создавать собственные ты сдержись tag перемешивая это с truncatechars что-то похожее на это:

# myapp/templatetags/extra_tags.py

from django import template
from django.template.defaultfilters import truncatechars


register = template.Library()    

@register.simple_tag
def add_args(*args, **kwargs):
    chars = kwargs.get('chars')
    return truncatechars(' '.join([str(arg) for arg in args]), chars)

С этим ты мог бы делать нечто похожее в тебе сдержись:

{% load extra_tags %}

<p>{% add_args 10 "Compras" "Angie Alejo" chars=20 %}</p>

Результат был бы:

<p>10 Compras Angie ...</p>

Ты можешь делать то же самое с полями твоей модели:

{% load extra_tags %}

<p>{% add_args area.pk area.departamento area.encargado chars=20 %}</p>

Замечания:

Структура, чтобы создавать, сдержись tags он:

myapp/
    __init__.py
    models.py
    templatetags/
        __init__.py
        extra_tags.py
    views.py

Необходимо, чтобы ты возобновил твой сервер, чтобы мочь использовать ты, сдержись tag.

5
ответ дан 24.11.2019, 14:59

Это resolvГ - следующей формы, благодаря которым они ответили и помогли:

В модели:

 def get_full_information(self): 
     return '%s %s %s' (self.description, self.boss, self.dept) 

В сдержись:

 {{ area.details.get_full_information|truncatechars:30 }}
2
ответ дан 24.11.2019, 14:59
  • 1
    Очень хорошо! Только есть один согрешите и # 241; или проблема с этим soluci и # 243; n, если потом ты желаешь, что funci и # 243; n get_full_information показал новое поле, ты будешь должен обновлять ее, возобновлять сервер, и т.д. – César 18.01.2016, 18:26
  • 2
    Если, в самом деле implement и # 233; временным способом, проверять и # 233; хорошо soluci и # 243; n, что мне был далеко, с ними сдержись tags, потому что я увидел их в проекте, который был должен работать, и # 233; в будущем, но поскольку я едва изучаю, большое спасибо @C и # 233; sarBust и # 237; вы:) – Angie Alejo 18.01.2016, 18:33