SORU
7 Ocak 2009, ÇARŞAMBA


Nasıl django şablon özel şablon benim filtre için birden çok bağımsız değişken eklerim?

İşte benim özel filtre:

from django import template

register = template.Library()

@register.filter
def replace(value, cherche, remplacement):
    return value.replace(cherche, remplacement)

ve burada bir hata sonuçlandı benim şablon dosyasında kullanmaya çalıştım yolu vardır:

{{ attr.name|replace:"_"," " }}
{{ attr.name|replace:"_" " " }}
{{ attr.name|replace:"_":" " }}
{{ attr.name|replace:"cherche='_', remplacement=' '" }}

django's docs book araştırdım ama tek örnek, tek bir tartışmaya bile mümkün mü? kullanarak buldum

CEVAP
8 Ocak 2009, PERŞEMBE


Mümkün ve oldukça basittir.

Django sadece filtre için bir argüman sağlar, ama tek bir dize onları ayırmak için virgül kullanarak tüm argümanlar koyamazsın sebebi var.

Eğer Eğer X değişkeni listesinde olup olmadığını kontrol eden bir filtre istiyorsanız yani, örneğin, [1,2,3,4] şuna benzer bir şablon filtre isteyeceksiniz:

{% if X|is_in:"1,2,3,4" %}

Şimdi böyle templatetag oluşturabilirsiniz:

from django.template import Library

register = Library()

def is_in(var, args):
    if args is None:
        return False
    arg_list = [arg.strip() for arg in args.split(',')]
    return var in arg_list

register.filter(is_in)

Arg_list oluşturduğu çizgi, virgül ve çağrıları üzerine besten dize böler bu jeneratör bir ifadesidir .() şerit baştaki ve sondaki boşlukları kaldırmak için.

Eğer, örneğin, 3. argüman bir int ise o zaman yap:

arg_list[2] = int(arg_list[2])

Ya eğer onlara değer vermez, eğer:

arg_list = [int(arg) for arg in args.split(',')]

EDİT: şimdi özellikle cevap sorunuzu kullanarak anahtar değer çiftleri olarak parametreleri kullanabilirsiniz aynı sınıf Django kullanan için ayrıştırma sorgu dizeleri dışında URL, sonra da parası işleme karakter kodlaması düzgün göre settings.py.

Sorgu dizeleri gibi, her parametre arasına '&':

{{ attr.name|replace:"cherche=_&remplacement= " }}

Fonksiyon şimdi bu gibi görünecektir değiştirin:

from django import template
from django.http import QueryDict

register = template.Library()

@register.filter
def replace(value, args):
    qs = QueryDict(args)
    if qs.has_key('cherche') and qs.has_key('remplacement'):
        return value.replace(qs['cherche'], qs['remplacement'])
    else:
        return value

Bu, yanlış bir değişiklik yapmanın riski: biraz hızlanır mısın?

qs = QueryDict(args)
return value.replace(qs.get('cherche',''), qs.get('remplacement',''))

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Abe Olandres

    Abe Olandres

    16 EYLÜL 2006
  • NextKsa

    NextKsa

    7 EKİM 2009
  • TheFlightsuit

    TheFlightsui

    22 HAZİRAN 2009