Django πρότυπα και μεταβλητό χαρακτηριστικά

ψήφοι
32

Είμαι χρησιμοποιώντας το Google App Engine και Django πρότυπα.
Έχω ένα πίνακα που θέλετε να εμφανίσετε τα αντικείμενα να είναι κάπως έτσι:

Object Result:
    Items = [item1,item2]
    Users = [{name='username',item1=3,item2=4},..]

Το πρότυπο Django είναι:

<table>
<tr align=center>
    <th>user</th>
    {% for item in result.items %}
        <th>`item`</th>
    {% endfor %}
</tr>

{% for user in result.users %}
    <tr align=center> 
        <td>`user`.`name`</td>
        {% for item in result.items %}
            <td>` user`.`item `</td>
        {% endfor %}
    </tr>
{% endfor %}
</table>

Τώρα, η τεκμηρίωση που Django αναφέρει ότι, όταν βλέπει ένα . σε μεταβλητές
Προσπαθεί πολλά πράγματα για να πάρει τα στοιχεία, ένα εκ των οποίων είναι λεξικού αναζήτησης το οποίο είναι ακριβώς αυτό που θέλω, αλλά δεν φαίνεται να συμβαίνει ...

Δημοσιεύθηκε 30/08/2008 στις 14:20
πηγή χρήστη
Σε άλλες γλώσσες...                            


6 απαντήσεις

ψήφοι
9

Υποθέτω ότι το μέρος του δεν λειτουργεί είναι ` user`.`item `.

Django θα προσπαθεί μια αναζήτηση λεξικό, αλλά χρησιμοποιώντας το string "item"και όχι η τιμή της itemμεταβλητής βρόχου. Django έκανε το ίδιο πράγμα, όταν επιλυθεί ` user`.`name `με την nameιδιότητα του userαντικειμένου, αντί να ψάχνει για μια μεταβλητή που ονομάζεται name.

Νομίζω ότι θα χρειαστεί να κάνετε κάποια προεπεξεργασία των δεδομένων κατά την άποψή σας, πριν να το καταστήσει το πρότυπό σας.

Απαντήθηκε 30/08/2008 στις 15:16
πηγή χρήστη

ψήφοι
0

όχι αυτό θα πρέπει:

` user`.`item `

να είναι αυτό;

` item `

δεν υπάρχει αντικείμενο χρήστη στο πλαίσιο εντός του βρόχου ....;

Απαντήθηκε 31/08/2008 στις 23:29
πηγή χρήστη

ψήφοι
32

Βρήκα ένα «καλύτερο» / «καλύτερη» λύση για να πάρει μεταβλητές μέσα δεν τα ωραιότερα τρόπο του, αλλά λειτουργεί.

Μπορείτε να εγκαταστήσετε ένα προσαρμοσμένο φίλτρο σε Django που παίρνει το κλειδί της dict σας ως παράμετρο

Για να δουλέψει στην Google App-κινητήρα θα πρέπει να προσθέσετε ένα αρχείο στον κεντρικό κατάλογο σας, κάλεσα ορυχείο django_hack.py που περιέχει αυτό το μικρό κομμάτι του κώδικα

from google.appengine.ext import webapp

register = webapp.template.create_template_register()

def hash(h,key):
    if key in h:
        return h[key]
    else:
        return None

register.filter(hash)

Τώρα που έχουμε αυτό το αρχείο, το μόνο που χρειάζεται να κάνετε είναι να πείτε το app-κινητήρα να το χρησιμοποιήσει ... το κάνουμε αυτό με την προσθήκη αυτή τη μικρή γραμμή στο κύριο αρχείο σας

webapp.template.register_template_library('django_hack')

και κατά την άποψή σας πρότυπο προσθέσετε αυτό το πρότυπο αντί του συνηθισμένου κωδικού

{{ user|hash:item }}

Και του θα πρέπει να λειτουργεί τέλεια =)

Απαντήθηκε 08/09/2008 στις 20:01
πηγή χρήστη

ψήφοι
3

@Dave Webb (i δεν έχουν αξιολογηθεί αρκετά υψηλή για να σχολιάσει ακόμη)

Οι αναζητήσεις dot μπορούν να συνοψιστούν ως εξής: όταν το πρότυπο σύστημα αντιμετωπίζει μια τελεία στο όνομα μιας μεταβλητής, προσπαθεί τις παρακάτω αναζητήσεις, με αυτή τη σειρά:

* Dictionary lookup (e.e., foo["bar"])
* Attribute lookup (e.g., foo.bar)
* Method call (e.g., foo.bar())
* List-index lookup (e.g., foo[bar])

Το σύστημα χρησιμοποιεί τον πρώτο τύπο αναζήτησης που λειτουργεί. Είναι λογικό βραχυκύκλωμα.

Απαντήθηκε 14/08/2009 στις 16:45
πηγή χρήστη

ψήφοι
2

Ως αντικατάσταση για k, v σε user.items στη Μηχανή App Google χρησιμοποιώντας πρότυπα Django όπου user = { 'a': 1, 'β', 2, 'c', 3}

{% for pair in user.items %}
   {% for keyval in pair %} ` keyval `{% endfor %}<br>
{% endfor %}

α 1
β 2
γ 3

ζεύγος = (κλειδί, τιμή) για κάθε λεξικού στοιχείο.

Απαντήθηκε 27/06/2010 στις 01:34
πηγή χρήστη

ψήφοι
8

Ή μπορείτε να χρησιμοποιήσετε το προεπιλεγμένο σύστημα Django που χρησιμοποιείται για την επίλυση χαρακτηριστικά στην tempaltes όπως αυτό:

from django.template import Variable, VariableDoesNotExist
@register.filter
def hash(object, attr):
    pseudo_context = { 'object' : object }
    try:
        value = Variable('object.%s' % attr).resolve(pseudo_context)
    except VariableDoesNotExist:
        value = None
return value

Αυτό λειτουργεί ακριβώς

στο πρότυπό σας:

{{ user|hash:item }}
Απαντήθηκε 12/08/2010 στις 10:36
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more