Stavelin.com

Alt i django er mer eller mindre tilgjengelig for å utvides. Koden er åpen, og den som vil knote seg fram til nye løsninger kan bare sette i gang. I denne posten viser jeg hvordan du får tak i verdier fra fra dine modeller fra admin-panelet via change_form.html

Fordelen med rammeverk er selvsagt at noen allerede har tenkt på det aller meste fra før, ulempen er at du ikke vet hva de tenkte da de skreiv koden. Det meste er vell dokumentert et-eller-annet sted, men hvor skal du begynne å leite? Google, så klart, men hvilke søke-termer?

Min klasse i models.py har mange verdier, som dermed er representert med samme kolonne-navn i databasen. Men hvordan henter jeg disse enkeltvis ut når jeg skal redigere objektet fra admin-panelet? Hva heter objektet?
{{ obj.verdi }}, {{ object.verdi }} ?

Hvordan skal man gjette slikt?

Vell, det heter {{ original.verdi }}.
Dette er sakset ut fra min nå redigerte /templates/admin/appname/app/change_form.html (eksempler på appname og app: flatpages/flatpage)

{% block form_top %}
{% if original.url  and original.organization != 'nytimes.com' %}
< iframe src ="{{ original.url }}" width="100%" height="500">
{% endif %}

Ja, jeg vill ha en iframe som viser nettsiden som er laget, men ikke hvis den ligger hos nytimes.com, for de videresender panelet mitt til sin artikkel.

Jeg har begynt å snuse på django, og snubla raskt over "IndentationErrors". Koden jeg jobber med er fra "komme-i-gang-totorialene" på prosjektets websider, og var ofte "feilfri". Med det mener jeg at koden ser helt lik ut som i eksemplene.

Feilmeldingene på testserveren (http://localhost:8000, etter python manage.py runserver) sier:

...
unexpected indent (admin.py, line 16)
Exception Type: IndentationError
Exception Value: unexpected indent (admin.py, line 16)
...

Problemet er at innrykkene (indent, som lages ved å trykke på tab-tasten, på mactastaturet, på standard tastatur) som kommer med ved å kopiere koden fra tutorialen ikke er "det samme" som det innrykket et trykk på tab-tasten gir. Så lenge alle innrykker laget på samme måte, så skal det visstnok gå bra, men det løser ikke problemet.

Slik får du TextMate til å lage "myke innrykk".

Løsningen er å la redigeringsverktøyet lage mye innrykk (soft tabs). Jeg benytter textmate, så her er framgangsmåten for det.

soft tabs i django

"Soft tabs" gjør at koden ser pen ut, men uten å lage "IndentationErrors".

Som du kan se av bildet har jeg Python Django bundlen installert (dette er nok ikke nødvendig, dog). Til høyre for dette valget vises "Tab Size", som jeg satt til 4. Dette avstanden i et trykk på tab-tasten, målt i mellomrom, tror jeg. Underst i denne dropdown-menyen finnes "Soft Tabs (Spaces)" som gjør at når tab-knappen trykkes inn, så skrives ikke et normal innrykk, men nå 4 mellomrom.

Og så forsvant alle tilfellene av IndentationError etter denne endingen.