Seite 1 von 1

Dictonary in List

Verfasst: Montag 5. November 2018, 22:26
von Prinz_Monty
Jemand eine Idee wie ich auf die dicts zugreife irgendwie sind die in einer liste verbastelt. Zumindest sagt mir das der PyCharm Debuger. Habs zwar schon mal mit append und dann wieder in eine neue liste zupacken hinbekommen aber suche einen besseren weg.

Code: Alles auswählen

sdd = {list} <class 'list'>: [{'domain_id': '1', 'sys_userid': '1', 'sys_groupid': '2', 'sys_perm_user': 'riud', 'sys_perm_group': 'ru', 'sys_perm_other': '', 'server_id': '1', 'ip_address': '*', 'ipv6_address': '', 'domain': 'simsalabim.de', 'type': 'vhost', 'parent_d
 0 = {dict} {'domain_id': '1', 'sys_userid': '1', 'sys_groupid': '2', 'sys_perm_user': 'riud', 'sys_perm_group': 'ru', 'sys_perm_other': '', 'server_id': '1', 'ip_address': '*', 'ipv6_address': '', 'domain': 'simsalabim.de', 'type': 'vhost', 'parent_domain_id': '0', 'vhost_type': 'name', 'document_root': '/var/www/clients/client1/web1', 'web_folder': '', 'system_user': 'web1', 'system_group': 'client1', 'hd_quota': '-1', 'traffic_quota': '-1', 'cgi': 'n', 'ssi': 'n', 'suexec': 'y', 'errordocs': '1', 'is_subdomainwww': '1', 'subdomain': 'www', 'php': 'no', 'ruby': 'n', 'python': 'n', 'perl': 'n', 'redirect_type': None, 'redirect_path': None, 'seo_redirect': None, 'rewrite_to_https': 'n', 'ssl': 'n', 'ssl_letsencrypt': 'n', 'ssl_letsencrypt_exclude': 'n', 'ssl_state': None, 'ssl_locality': None, 'ssl_organisation': None, 'ssl_organisation_unit': None, 'ssl_country': None, 'ssl_domain': None, 'ssl_request': None, 'ssl_cert': None, 'ssl_bundle': None, 'ssl_key': None, 'ssl_action': None, 'stats_...
 1 = {dict} {'domain_id': '2', 'sys_userid': '1', 'sys_groupid': '3', 'sys_perm_user': 'riud', 'sys_perm_group': 'ru', 'sys_perm_other': '', 'server_id': '1', 'ip_address': '*', 'ipv6_address': '', 'domain': 'hallmax.de', 'type': 'vhost', 'parent_domain_id': '0', 'vhost_type': 'name', 'document_root': '/var/www/clients/client2/web2', 'web_folder': '', 'system_user': 'web2', 'system_group': 'client2', 'hd_quota': '-1', 'traffic_quota': '-1', 'cgi': 'n', 'ssi': 'n', 'suexec': 'y', 'errordocs': '1', 'is_subdomainwww': '1', 'subdomain': 'www', 'php': 'no', 'ruby': 'n', 'python': 'n', 'perl': 'n', 'redirect_type': None, 'redirect_path': None, 'seo_redirect': None, 'rewrite_to_https': 'n', 'ssl': 'n', 'ssl_letsencrypt': 'n', 'ssl_letsencrypt_exclude': 'n', 'ssl_state': None, 'ssl_locality': None, 'ssl_organisation': None, 'ssl_organisation_unit': None, 'ssl_country': None, 'ssl_domain': None, 'ssl_request': None, 'ssl_cert': None, 'ssl_bundle': None, 'ssl_key': None, 'ssl_action': None, 'stats_pas...

Re: Dictonary in List

Verfasst: Dienstag 6. November 2018, 00:13
von __blackjack__
@Prinz_Monty: In der Python-Dokumentation gibt es ein Tutorial.

Re: Dictonary in List

Verfasst: Dienstag 6. November 2018, 08:47
von /me
Prinz_Monty hat geschrieben: Montag 5. November 2018, 22:26Jemand eine Idee wie ich auf die dicts zugreife irgendwie sind die in einer liste verbastelt.
Ich bin mir nicht sicher ob ich die Frage korrekt verstanden habe. Möchtest du wissen wie du auf Listenelemente zugreifen kannst? Da kommt ziemlich weit vorne im offiziellen Tutorial: Lists

Re: Dictonary in List

Verfasst: Dienstag 6. November 2018, 16:46
von Prinz_Monty
Hallo,

ja ich werde mir später das mit den Listen noch mal genauer anschauen. Mein Problem ist das Ich eine Liste in einer Dict habe

Code: Alles auswählen

 dict{ list ['Blub', 'Bla' ] } 

Re: Dictonary in List

Verfasst: Dienstag 6. November 2018, 16:49
von __deets__
Das ist kein Python-Code. Und was genau ist das Problem? Wenn du einen Wert aus einem dict willst, dann musst du doch nur mit dem Schluessel darauf zugreifen. Das mit den Dicts kannst du dir ja jetzt schonmal genauer anschauen.

Re: Dictonary in List

Verfasst: Dienstag 6. November 2018, 16:56
von Prinz_Monty
Das nur ein beispiel wie es bei mir im Debuger aussieht. Ist gut ich schau mal ;)

Re: Dictonary in List

Verfasst: Dienstag 6. November 2018, 23:39
von Prinz_Monty
So habe es hinbekommen. Hab irgendwie in die falsche Richtung gedacht.

Grob erklärt mir liefert eine API JSON Daten, diese werden in einer Methode als Dict. gespeichert. Aus diesem ziehe ich mir bestimmte Values (domain['domain_id']) und hänge sie mit append() an die Liste "domains". Diese wollte ich dann im Frontend mit Django ausgeben. Naja hab mich ordentlich verrannt. :mrgreen:

Hier nun meine Lösung:

Code: Alles auswählen

def domains_by_status(request):
    domain_data = connection_api().sites_web_domain_get_all("y")



    domains = []



    for domain in domain_data:
        domains.append({'domain_id': domain['domain_id'],

                        'name': domain['domain'],
                        'ssl': domain['ssl'],
                        'le': domain[ 'ssl_letsencrypt'],
                        'added_date': domain['added_date'],
                        'sys_groupid': domain['sys_groupid'],
                        'active': domain['active'],
                        })



    return render(request, 'domain_cm/domains.html', {'items': domains})
Ausgabe im Frontend:

Code: Alles auswählen

{% for item in items %}
 
      <p>ID: {{ item.domain_id }} Domain: {{ item.name }} Added: {{ item.added_date }}</p>

{% endfor %}
Ausgabe:

ID: 1 Domain: simsalabim.de Added: 2018-10-31
ID: 2 Domain: hallmax.de Added: 2018-10-31
ID: 3 Domain: achkommschon.de Added: 2018-10-31

Re: Dictonary in List

Verfasst: Mittwoch 7. November 2018, 09:58
von Sirius3
Und was ist jetzt der Unterschied zwischen domain_data und domains außer dass ssl_letsencrypt in ein kryptisches le umbenannt wird, dass sich der Aufwand das zu "konvertieren" lohnt?

Das wäre einfacher:

Code: Alles auswählen

def domains_by_status(request):
    domains = connection_api().sites_web_domain_get_all("y")


    return render(request, 'domain_cm/domains.html', {'items': domains})

Re: Dictonary in List

Verfasst: Mittwoch 7. November 2018, 10:39
von Prinz_Monty
Da hast du vermutlich recht. Musste erst verstehen wie ich mit der Template Engine auf die Werte zugreife. Ich lerne halt noch. Aber hey war es halt ne nette Übung vielleicht brauch ich es ja doch mal so.