QR Code Business Card

noctus.net

ねぇ、今日はどこに行こうかな?

Archiv für den Tag ‘Code’

Iteration durch gtk.TreeModel

keine Kommentare

Zur Verarbeitung von Einträgen in einem gtk.TreeModel bedient man sich in Python üblicherweise der Iteration. Hierbei bietet gtk.TreeModel einige Methoden zur Arbeit damit. Ein übliches Konstrukt sieht damit so aus:

iter = model.get_iter_first()
while True:
    value = model.get_value(iter, 0)
    # Do something with value
    iter = model.iter_next(iter)
    if iter is None:
        break

Ziemlich umständlich und daher oft auch in dieser etwas vereinfachten Version vorzufinden:

iter = model.get_iter_first()
while iter:
    value = model.get_value(iter, 0)
    # Do something with value
    iter = model.iter_next(iter)

Doch wie so oft in Python gibt es eine viel intuitivere und simplere Lösung; gtk.TreeModel implementiert __iter__ und __next__, womit sich das obige Konstrukt auf folgenden Zweizeiler reduzieren lässt.

for row in model:
    value = row[0]

Bei row handelt es sich um eine gtk.TreeModelRow, welche intuitiven Zugriff auf die Daten der jeweiligen Spalten ermöglicht.

Geschrieben von Mathias

7. Mai 2010 um 21:35

Tags: , ,

Operatoren-Verkettung in Python

keine Kommentare

Eher durch Zufall bin ich heute auf etwas gestoßen, was ich mir seit jeher in einer vernünftigen Programmiersprache gewünscht aber bis jetzt nie vorgefunden habe:

if a < b < c
    # …

Ein völlig intuitives und sehr gut lesbares Konstrukt zum einfachen Vergleich dreier oder mehr Operanden. In praktisch jeder Sprache muss man sich jedoch mit diesem Konstrukt behelfen:

if a < b and b < c
    # …

Nicht so jedoch in Python. Dort ist genau obiges möglich. Hierbei können offenbar beliebig viele Operanden verkettet werden. Eine feine Sache.

Geschrieben von Mathias

30. März 2010 um 17:44

Tags: ,

News LIST- und SINGLE-Ansicht auf einer Seite

2 Kommentare

In der Dokumentation zu tt_news wird ein Weg beschrieben, um die LIST- und SINGLE-Ansicht für News-Einträge in einer einzigen Plugininstanz nutzen zu können.

Unglücklicherweise ist dieses Vorgehen auf das althergebrachte Templating-System zugeschnitten und damit z. B. für TemplaVoilà nicht anwendbar.

Es gibt jedoch eine weitere Möglichkeit, die praktisch mit jedem Templating-System funktionieren sollte und nur wenige Zeilen TypoScript im Template der jeweiligen Seite erfordert:

plugin.tt_news {
 
  // Unset reference to Flexform field
  code >
  // Set default view, e. g. LIST
  code = LIST
}
 
[globalVar= GP:tx_ttnews|tt_news>0]
// Change code to SINGLE if there's a news record to display
plugin.tt_news.code = SINGLE
[global]

Damit dies jedoch funktioniert, darf in der Konfiguration für das News-Plugin nichts bei den Anzeigetypen (SINGLE, LIST, LATEST, …) ausgewählt werden. Andernfalls wird jegliche Einstellung im TypoScript ignoriert. Die Meldung, dass das Plugin hierdurch nicht konfiguriert ist, kann man getrost ignorieren.

Hinweis für die Version 3.0.0 der News-Erweiterung: das Formular für die Pluginkonfiguration wurde hier drastisch umgestaltet, wodurch es nunmehr unmöglich ist, keinen Wert für den Anzeigetyp festzulegen. Eine mögliche Lösung hierfür ist eine Modifikation des Flexforms der News-Erweiterung, was ich in diesem Zuge auch im Bugtracker von TYPO3 vorgeschlagen habe.

Das Resultat des ganzen Vorhabens sind kürzere Adressen durch die Einspaarung einer Seite.

Geschrieben von Mathias

18. Februar 2009 um 12:10

Tags: ,

E-Mail-Schutz vor Spambots

keine Kommentare

Einer Bitte folgend veröffentliche ich hier den – zugegeben nicht sonderlich komplexen – Code in meinem Impressum, welcher die E-Mail-Adresse vor Spambots verbirgt, bis der erforderliche Button betätigt wurde:

<?php
 
$str_value = 'E-Mail (Anzeigen)';
 
if (isset($_POST['showmail']) and $_POST['showmail'] == $str_value) {
 
    echo '      <p><a href="mailto:info@example.org">E-Mail-Adresse</a><p>' . "\n";
 
} else {
 
    echo '      <form action="" method="post" accept-charset="utf-8">' . "\n" .
         '        <p><input type="submit" name="showmail" value="' . $str_value . '" />' . "\n" .
         '      </form>' . "\n";
}
 
?>

Früher oder später wird auch der Code meines Gästebuches folgen. Ich hoffe früher.

Geschrieben von Mathias

9. August 2006 um 13:10

Tags: ,