¿Consejos y funciones favoritos de Django?

Resuelto Haes asked hace 15 años • 0 respuestas

Inspirándome en la serie de preguntas 'Funciones ocultas de...', tengo curiosidad por conocer tus consejos favoritos de Django o las características menos conocidas pero útiles que conoces.

  • Por favor, incluya solo un consejo por respuesta.
  • Agregue los requisitos de la versión de Django, si los hay.
Haes avatar Feb 15 '09 17:02 Haes
Aceptado

Voy a empezar con un consejo mío :)

Utilice os.path.dirname() en settings.py para evitar nombres de directorio codificados.

No codifique las rutas en su settings.py si desea ejecutar su proyecto en diferentes ubicaciones. Utilice el siguiente código en settings.py si sus plantillas y archivos estáticos se encuentran dentro del directorio del proyecto Django:

# settings.py
import os
PROJECT_DIR = os.path.dirname(__file__)
...
STATIC_DOC_ROOT = os.path.join(PROJECT_DIR, "static")
...
TEMPLATE_DIRS = (
    os.path.join(PROJECT_DIR, "templates"),
)

Créditos: obtuve este consejo del screencast ' Django From the Ground Up '.

Haes avatar Feb 15 '2009 10:02 Haes

Instale Django Command Extensions y pygraphviz y luego ejecute el siguiente comando para obtener una visualización del modelo Django realmente atractiva:

./manage.py graph_models -a -g -o my_project.png
Haes avatar Feb 15 '2009 21:02 Haes

Utilice el decorador de django-annoying render_to en lugar de render_to_response.

@render_to('template.html')
def foo(request):
    bars = Bar.objects.all()
    if request.user.is_authenticated():
        return HttpResponseRedirect("/some/url/")
    else:
        return {'bars': bars}

# equals to
def foo(request):
    bars = Bar.objects.all()
    if request.user.is_authenticated():
        return HttpResponseRedirect("/some/url/")
    else:
        return render_to_response('template.html',
                              {'bars': bars},
                              context_instance=RequestContext(request))

Editado para señalar que devolver una HttpResponse (como una redirección) provocará un cortocircuito en el decorador y funcionará tal como se espera.

user20955 avatar Feb 15 '2009 16:02 user20955