Funciones de Acceso Directo de Django

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 8

FUNCIONES DE ACCESO DIRECTO DE DJANGO

(shortcuts)
El paquete django.shortcuts colecciona funciones de ayuda y clases que
abarcan mltiples niveles de MVC. En otras palabras estas funciones/clases
introducen acoplamiento controlado por conveniencia.
1. Render
render(request, template_name[, dictionary][, context_instance][,
content_type][, status][, current_app][, dirs])

Combina una plantilla dada con un diccionario contexto dado y devuelve


una HttpResponse objeto con ese texto rendido. Django no provee una
funcin de atajo que retorne un TemplateResponse porque el constructor
del TemplateResponse ofrece el mismo nivel de comodidad que render().

Argumentos Obligatorios

request: El objeto solicitud (request) es usado para generar esa


respuesta (response)

template_name: El nombre completo de una plantilla (template) para


usar o una secuencia de nombres de plantilla.

Argumentos Opcionales

Dictionary: Un diccionario de los valores a aadir al context de la


plantilla. Por defecto, es un diccionario vacio. Si un valor en el
diccionario es llamado, la vista lo llama justo antes de la
representacin en plantilla.

context_instance: El context instance renderiza el template. Por


defecto, la plantilla se representar con una instancia de
RequestContext (lleno con valores de request y dictionary)

content-type: El tipo MIME (Multipurpose Internet Mail Extensions) se


utiliza para el documento resultante.

status: El estado del cdigo para la respuesta (response).

current_app: Una pista que indica que aplicacin contiene la vista


actual.

dirs: Una tuple o lista de valores que anulan el setting


TEMPLATE_DIRS.

Ejemplo:
El siguiente ejemplo renderiza la plantilla myapp/index.html con el
MIME type application/xhtml+xml:
from django.shortcuts import render

def my_view(request):
# View code here...
return render(request, 'myapp/index.html', {"foo": "bar"},
content_type="application/xhtml+xml")

Este ejemplo es equivalente a:


from django.http import HttpResponse
from django.template import RequestContext, loader
def my_view(request):
# View code here...
t = loader.get_template('myapp/index.html')
c = RequestContext(request, {'foo': 'bar'})
return HttpResponse(t.render(c),
content_type="application/xhtml+xml")

Si t quieres sobreescribir la configuracin del TEMPLATE_DIRS, usa el


parmetro dirs:
from django.shortcuts import render
def my_view(request):
# View code here...
return render(request, 'index.html', dirs=('custom_templates',))

2. render_to_response

render_to_response(template_name[, dictionary][, context_instance][,


content_type][, dirs])
Argumentos Obligatorios
Template_name: El nombre complete de la plantilla a usar o secuencia de
nombres de plantillas. Si se da una secuencia, se utilizar la primera
plantilla existente.
Argumentos Opcionales

dictionary: un diccionario de valores para aadir al contexto de la


plantilla. Por defecto, est en blanco. Si un valor en el diccionario es
llamado, la vista llamar antes renderizar el template.

context_instance: La instancia del context renderiza el template. Por


defecto, el template ser renderizado con un instancia de Context
(relleno con valores del diccionario). Si t necesitas utilizar los
procesadores de contexto, renderizar la plantilla con una instancia de
RequestContext. Su cdigo podra ser algo como esto:
return render_to_response('my_template.html',
my_data_dictionary,
context_instance=RequestContext(request))

content_type: El MIME type se usa para el document resultante.


dirs: Una tupla o lista de valores para sobreescribir la configuracin del
TEMPLATE_DIRS

Ejemplos
El siguiente ejemplo renderiza la plantilla myapp/index.html con el MIME
type application/xhtml+xml:
from django.shortcuts import render_to_response
def my_view(request):
# View code here...
return render_to_response('myapp/index.html', {"foo": "bar"},
content_type="application/xhtml+xml")

Este ejemplo es equivalente a:

from django.http import HttpResponse


from django.template import Context, loader
def my_view(request):
# View code here...
t = loader.get_template('myapp/index.html')
c = Context({'foo': 'bar'})
return HttpResponse(t.render(c),
content_type="application/xhtml+xml")
Si t quieres sobreescribir la configuracin del TEMPLATE_DIRS, use el
parmetro dirs:
from django.shortcuts import render_to_response
def my_view(request):
# View code here...
return render_to_response('index.html', dirs=('custom_templates',))

3. Redirect
redirect(to, [permanent=False, ]*args, **kwargs)
Retorna un HttpResponseRedirect apropiado al URL para pasar los
argumentos.
Los argumentos pueden ser:

Un modelo: La funcin get_absolite_url() del modelo ser llamado.

Un nombre de vista, posiblemente con argumentos: urlresolvers.reverse


ser usado para revertir-resolver el nombre.

Una URL absoluta y relativa, las cuales sern usados tal cual para la
ubicacin de redireccin.

Ejemplo:
T puedes usar la funcin redirect() en un nmero de formas.

a) Pasando algunos objetos; Que el mtodo get_absolute_url() del objeto


ser llamado para averiguar la URL de redireccin:
from django.shortcuts import redirect
def my_view(request):
...
object = MyModel.objects.get(...)
return redirect(object)

b) Pasando el nombre de una vista y opcionalmente algn argumento


posicional o palabra clave; la URL se resolver al contrario usando el
mtodo reverse():
def my_view(request):
...
return redirect('some-view-name', foo='bar')

c) Pasando un URL codificada para redirigir a:


def my_view(request):
...
return redirect('/some/url/')

Esto tambin trabaja con la URLs complete:


def my_view(request):
...
return redirect('http://example.com/')

Por defecto, redirect() retornar un redirect temporal. Todas las formas


anteriores aceptan un argumento permanente; si se establece a True un
redirect ser devuelto:
def my_view(request):
...
object = MyModel.objects.get(...)
return redirect(object, permanent=True)

4. get_object_or_404

get_object_or_404 ( klass , * args , ** kwargs )


Llama al get() y le entrega un model manager , pero eleva un error Http404 en
lugar de una excepcin DoesNotExist del modelo.
Argumentos Obligatrios
1. klass: Un clase Model, un manager o una instancia QuerySet desde la
cual obtener el objeto:
2. **kwargs: Parmetros de bsqueda, las cuales deberan estar en el
formato aceptado por get() y filter()
Ejemplo
El siguiente ejemplo obtiene el objeto con el primary key del MyModel:
from django.shortcuts import get_object_or_404
def my_view(request):
my_object = get_object_or_404(MyModel, pk=1)

Ese ejemplo es equivalente a:


from django.http import Http404
def my_view(request):
try:
my_object = MyModel.objects.get(pk=1)
except MyModel.DoesNotExist:
raise Http404("No MyModel matches the given query.")

El caso de uso ms comn es pasar un Model, como se muestra arriba. Sin


embargo, t tambin puedes pasar una isntancia QuerySet.
queryset = Book.objects.filter(title__startswith='M')
get_object_or_404(queryset, pk=1)

El ejemplo de arriba es un poco artificioso ya que esequivalente a hacer:

get_object_or_404(Book, title__startswith='M', pk=1)

Pero eso puede ser ms til si usted pasar la variable queryset de


cualquier manera.
Finalmente, t puedes tambin usar un Manager. Esto es til por ejemplo si
t tienes un Manager personalizado:
get_object_or_404(Book.dahl_objects, title='Matilda')

T tambin puedes usar related managers:


author = Author.objects.get(name='Roald Dahl')
get_object_or_404(author.book_set, title='Matilda')

5. get_list_or_404
get_list_or_404 ( klass , * args , ** kwargs )
Devuelve el resultado del filter() en un manager de modelo determinado
emite una lista, arroja Http404 si la lista resultante esta vaca.
Argumentos Requeridos
Klass: un Model, Manager o instancia de QuerySet desde la cual se
consigue la lista.

**kwargs: Parmetros de bsqueda, las cuales deberan ser en el


formato aceptado por get() y filter()

Ejemplo
El siguiente ejemplo obtiene todos los objetos publicados desde el
MyModel:
from django.shortcuts import get_list_or_404
def my_view(request):
my_objects = get_list_or_404(MyModel, published=True)
Este ejemplo es equivalente a:
from django.http import Http404
def my_view(request):

my_objects = list(MyModel.objects.filter(published=True))
if not my_objects:
raise Http404("No MyModel matches the given query.")

NOTA:
HttpResponse
El objeto HttpResponse permite enviar contenido a la pgina. Uno es
responsables de crearlos, poblarlos y enviarlos.
Decir al Navegador tratar la respuesta como un archivo adjunto
Para dcirle al navegador para tratar la respuesta como un archivo adjunto,
utilice el argumento content_type y

También podría gustarte