I modelli di Django: il valore della chiave di dizionario con uno spazio

In Django modello, c’è un modo per ottenere un valore da una chiave che dispone di uno spazio?
Ad esempio, se ho un dict come:

{"Restaurant Name": Foo}

Come faccio a riferimento il valore nel mio modello? Pseudo-sintassi potrebbe essere:

{{ entry['Restaurant Name'] }} 

 

2 Replies
  1. 23

    Non c’è un modo pulito per fare questo con il built-in tag. Cercando di fare qualcosa di simile:

    {{ a.'Restaurant Name'}} or {{ a.Restaurant Name }}

    genererà un errore di analisi.

    Si potrebbe fare un ciclo for, attraverso il dizionario (ma è brutto/inefficiente):

    {% for k, v in your_dict_passed_into_context %}
       {% ifequal k "Restaurant Name" %}
           {{ v }}
       {% endifequal %}
    {% endfor %}

    Un tag personalizzato probabilmente sarebbe cleaner:

    from django import template
    register = template.Library()
    
    @register.simple_tag
    def dictKeyLookup(the_dict, key):
       # Try to fetch from the dict, and if it's not found return an empty string.
       return the_dict.get(key, '')

    e utilizzare il modello in questo modo:

    {% dictKeyLookup your_dict_passed_into_context "Restaurant Name" %}

    O forse tenta di ristrutturare la tua dict di avere “più facile lavorare con i” tasti.

    • +1 per “magari cercare di ristrutturare la tua dict”.
    • Django: ‘Sviluppo Web Fatto Bene’. 🙁
    • Se sei il dizionario è nidificati questo funziona bene: result = the_dict; for key in keys: if hasattr(result, 'get'): result = result.get(key, ''); else: break; return result
    • Vuoi sapere come combinare questo con l’ {% if %} tag in Django? Sto cercando di fare qualcosa di simile a questo {% se dictKeyLookup dict_name “chiave” %} fare qualcosa di {% else %} fare qualcosa di diverso
  2. 10

    È possibile utilizzare un filtro personalizzato così.

    from django import template
    register = template.Library()
    
    @register.filter
    def get(mapping, key):
      return mapping.get(key, '')

    e all’interno del modello

    {{ entry|get:"Restaurant Name" }} 
    • Le sue opere, per me. Creato una cartella all’interno della app che si chiama tag con due file di init.py e get.py(che contiene il codice di cui sopra). Ha anche aggiunto {% del carico get %} in cima al template html
    • La correzione, la directory dovrebbe essere chiamato ‘templatetags’; notare la ” s ” alla fine. Docs: docs.djangoproject.com/en/2.1/howto/custom-template-tags

Lascia un commento