[Django] No consigo resolver equivalente a $_GET['id']

B

Buenas noches,

[+] Edito, ya lo he resuelto, era por culpa de poner mal el orden de las urls en urls.py, el index tiene que ir al final por lo visto :). Modifico los trozos de código y lo dejo por si sirve para alguien.

view.py:

def noticia(request, id):
    noticia = get_object_or_404(Noticias, id=id)
    return render_to_response('noticia.html',
                               RequestContext(request, locals()))

urls.py

from django.conf.urls.defaults import *

from web import views

urlpatterns = patterns('',
    url(r'^noticia/(?P<id>\d+)$', views.noticia, name='noticia'),
    url(r'^', views.index, name='index'),
)

noticia.html

{% extends "base.html" %}

{% block todo %}
    <p><strong class="titulo">{{noticia.titulo}}</strong></p>
    <p class="lead">{{noticia.contido}}</p>
{% endblock todo %}

Un saludo!

P.S: Toda la tarde enzarzado, me animo a preguntar y lo resuelvo, ley de murphy.

C

No tiene porqué ir al final.

Django usa expresiones regulares para comprobar la URL, y lo hace en el orden en que han sido declaradas. Y se para en cuanto encuentre una que encaja con el patrón.

Ahora, tu patrón del índice es un , el cual hace que cualquier URL encaje en él, y nunca leerá las que están despues. Para solucionarlo puedes ponerlo al final como has hecho, o mejor, crear una expresión regular más estricta con otra marca que indica el final ($):

url(r'^$', views.index, name='index')

dónde sólo encajarán las URL que no tengan PATH, y por tanto puedes ubicarla donde quieras, incluso la primera de todas.

1 1 respuesta
B

#2

Buenas!

Pues muchas gracias por tu comentario, la verdad es que sabía la teoría y como funcionan las regex, pero ni me había planteado tu solución de hacerla más estricta y sólo me planteé que al ser un script iría ejecutando linea a linea de aí mi chapucera solución, me viene perfecto para futuros proyectos.

Un saludo y nuevamente, gracias!

Usuarios habituales