2016-05-17 5 views
1

Obwohl ich einen kundenspezifischen Filter benutzt habe, um auf die Wörterbücher mit variablem Schlüssel zuzugreifen, kann ich nicht tun. Unten finden Sie das Code-Snippet.Konnte nicht auf Kontextwörterbuchwerte zugreifen, die variablen Schlüssel verwendend, der Filter in der Django Schablone verwendet

view.py

def DBConnect(request): 
    c = {} 
    c['dbs'] = get_all_db() #returns an array of db. 
    for db in c['dbs']: 
     c[db] = get_all_tables(db) #returns all the tables in db and storing in context dictionary with db name as key. 

    return render_to_response('test.html', c) 

Als Beispiel wird C Folgenden enthalten: c = { 'DBS': [u'db1' , u'db2 '], u'db1': [U‘ tb1' , u'tb2 '], u'db2': [u'tb21' , u'tb22' ]}

app_filter.py

@filter.filter 
def get_item(dictionary, key): 
    return dictionary.get(key) 

Test.html .... . ...

Bitte schlagen Sie vor, wenn ich den Kontext auf andere Weise übergeben sollte, um dieses Problem zu überwinden. Vielen Dank im Voraus.

+0

Haben Sie passieren ‚dbs‘ in Testvorlage? Gemäß dem obigen Code geben Sie c ein, das ein Wörterbuch ist, das als einen seiner Schlüssel 'dbs' hat. –

+0

Danke Rohan und AKS für deine Antworten. Ich bin ziemlich neu im Django-Framework. Ich werde diese Lösung implementieren und als Antwort markieren. Ich bin mir sehr sicher, dass beide Lösungen die Arbeit machen werden. Danke AKS für die Erklärung, das hilft mir wirklich, einige der Dinge zu verstehen, die mit Django zu tun haben. Danke euch beiden nochmal. +1 für euch beide .. :-) – Amit

+0

@Amit: Danke für die Kommentare und wir helfen gerne weiter. Bitte lesen Sie auch [Was soll ich tun, wenn jemand meine Frage beantwortet?] (Http://stackoverflow.com/help/someone-answers). – AKS

Antwort

0

verwenden Da c ein Zusammenhang ist es in der Vorlage nicht direkt verfügbar ist. Was ist der Schlüssel zur Verfügung stehen/Werte, die Sie im Kontext gesetzt d Wenn Ihr Kontext ist wie folgt:

c = {'dbs':[u'db1', u'db2'], u'db1' : [u'tb1', u'tb2'], u'db2' : [u'tb21', u'tb22']} 

können Sie dbs zugreifen, db1 und db2 als Variablen in der Vorlage. Hier werden Schlüssel in Variablen übersetzt, und die Werte in dem Kontext sind die Werte dieser Variablen, z. Wenn Sie auf dbs zugreifen, greifen Sie direkt auf c['dbs'] zu.

Anbetracht dessen, was Sie tun, würde ich wählen, um es zu tun, wie folgt vor:

def DBConnect(request): 
    c = {} 
    dbs = get_all_db() #returns an array of db. 
    c['dbtbls'] = {db: get_all_tables(db) for db in dbs} 
    return render_to_response('test.html', c) 

nun in der Vorlage können Sie direkt zugreifen dbtbls.items:

{% for db, tbls in dbtbls.items %} 
    do something with {{ db }} here. 
    {{ tbls }} # this is the list of all the tables in the db 
{% endfor %} 
0

In Django Vorlage Kontext Variablen direkt zugegriffen werden, wie Sie von dbs sehen. Sie müssen keinen wörterbuchähnlichen Zugriff verwenden.

Sie können leicht den Kontext ändern Sie den Code als

def DBConnect(request): 
    c = {} 
    c['dbs'] = get_all_db() #returns an array of db. 
    c['dbtables'] = {} 
    for db in c['dbs']: 
     c['dbtables'][db] = get_all_tables(db) 

    return render_to_response('test.html', c) 

dann in Vorlage zu Ihnen passen

{%for db in dbs%} 
    do something with {{db}} here. 
    {{ dbtables | get_item : db }} 
{% endfor %} 
Verwandte Themen