Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

323
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!