Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

325
Vistas
Diferencia entre usar la etiqueta de URL y get_absolute_url

Si tengo un modelo como este:

 class Article(models.Model): title = models.CharField(max_length=200) # ... rest of the code ... def get_absolute_url(self): return reverse('article-detail', args=[str(self.pk)])

y tengo un mapeo de URL como este:

 url(r'^article/(?P<pk>[0-9]+)/$', views.ArticleView.as_view(), name='article-detail'),

En la plantilla debo usar:

 <a href="{{ article.get_absolute_url }}">{{ article.title }}</a>

o

 <a href="{% url 'article-detail' article.pk %}">{{ article.title }}</a>

Sigo pensando que ambas son buenas ideas, pero ¿cuál es la mejor?

En el primer código que escribí args=[str(self.pk)] , ¿por qué debo convertir self.pk en una cadena? ¿Las URL deben ser cadenas?

En mi vista genérica, ¿cómo uso la variable pk? Estoy realmente confundido con ese slug_field , slug_url_kwarg , pk_url_kwarg , query_pk_and_slug .

¿Cuál coincide con cuál?

Si configuro query_pk_and_slug en True, slug_field = pk?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

En mi opinión, usa

 <a href="{{ article.get_absolute_url }}">{{ article.title }}</a>

es una mejor práctica. Si más adelante desea cambiar la URL de este recurso, lo hará una vez en su función de modelos y no buscará en cada página de plantilla una referencia a esta URL específica. La filosofía detrás de esto es que la URL de un artículo es un recurso que pertenece al modelo del artículo ( Django: ¿Modelos gordos y controladores delgados? )

Un mejor enfoque es escribir

 return reverse('article-detail', kwargs={'pk': self.pk})

De esta forma, y al tener múltiples argumentos en tu url, siempre sabrás el valor de cada argumento ( *args y **kwargs? )

No estoy seguro acerca de la última parte de su pregunta. Con todo, pk representa la clave principal, que por defecto (y déjelo así) es el id (producido automáticamente por su base de datos), y slug es un campo único en la base de datos (usted lo especifica en la definición de su modelo) que representa un campo de babosas. Slug se usa cuando prefiere direcciones URL más legibles (seo) como /article/giannis-antetokounmpo-is-the-best, en lugar de /article/404.

Para comprender cómo funcionan las vistas basadas en clases en django (mejor práctica que las basadas en funciones), eche un vistazo a https://ccbv.co.uk/projects/Django/1.10/django.views.generic.detail/DetailView/ por ejemplo . Cuando se llama al GET (método http), se llama como resultado a la función get del modelo. Si nota, hay una función self.get_object(). En la definición de get_object(), puede ver la lógica que está buscando. Específicamente, en los comentarios, puede ver todas las formas en que View está tratando de encontrar el único objeto para devolver. Debe elegir uno, especificando las variables apropiadas.

over 4 years ago · Santiago Trujillo Denunciar

0

La url tag hará la operación inversa y generará una ruta de url, donde get_absolute_url debe definirse en un modelo, ya que esto es para obtener la url para un objeto en particular.

Aquí hay una publicación que explica get_absolute_url

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda