No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Aprende todo un fin de semana sin pagar una suscripción 🔥

Aprende todo un fin de semana sin pagar una suscripción 🔥

Regístrate

Comienza en:

0D
13H
40M
41S
Curso Básico de Django

Curso Básico de Django

Facundo García Martoni

Facundo García Martoni

Utilizando la etiqueta url para evitar el hard coding

23/29
Recursos

Aportes 10

Preguntas 7

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

href=" {% url  'polls:detail'  question. id  %} "

recuerden que la varible que agregó en la urls. py de la “app polls” app_name=“polls” no la está usando. y polls esta disponible por que asi le puso en las urls de del proyecto en general.

path(''polls/", include(('polls.urls', 'polls'), name='polls')),

psdt no estoy siguiendo el curso en codigo. solo mirando.

En un principo no me funcionaba porque no recargaba localhost:8888/polls ya que quedaba en cache la pagina, sin los cambios en el HTML

Utilizando la etiqueta url para evitar el hard coding

Conectamos urls. py con los templates:

from django. urls import path

from . import views

app_name = "polls"

urlpatterns = [
    # * ex: /polls/
    path('', views. index, name="index"),
    # * ex: /polls/3
    path('<int:question_id>/', views. detail, name="detail"),
    # * ex: /polls/3/results
    path('<int:question_id>/results/', views. results, name="results"),
    # * ex: /polls/3/vote
    path('<int:question_id>/vote/', views. vote, name="vote"),
]

{% if latest_question_list %}
<ul>
  {% for question in latest_question_list %}
  <li>
    <a href="{% url 'polls:detail' question. id %}"
      >{{ question.question_text }}</a
    >
    {% comment %} polls sale del app_name y detail sale del name de la vista en
    urls.py {% endcomment %}
  </li>
  {% endfor %}
</ul>
{% else %}
<p>No polls are available.</p>
{% endif %}

SI no les carga los cambios, simplemente reinicien el servidor y recargan la pagina y les funcionara sin problemas.

Extends
Esta etiqueta se puede utilizar de dos formas:

{% extends “base.html” %} (con comillas) usa el valor literal “base.html” como el nombre de la plantilla principal para extender.

{% extiende la variable%} usa el valor de la variable. Si la variable se evalúa como una cadena, Django usará esa cadena como el nombre de la plantilla principal. Si la variable se evalúa como un objeto Plantilla, Django usará ese objeto como plantilla principal.

Excelente clase, mucho ojo con la variable app_name ya que sí la utiliza internamente.

app_name = 'polls'

at index.html we are hard coding at the href link and this can be fuckd up if we change the path or the name of the app.

How to avoid it → modularizing our code

First, we have to set an app name to pass into the href of index.html

urls,py

from django.urls import path
from . import views #from here import...

**app_name = "polls"**
urlpatterns = [
    #ex: /polls/
    path("", views.index, name="index"),
    #ex: /polls/5/
    **path("<int:question_id>/details/pruebadecambiopademostrarquefuncionalaurltag", views.detail, name="detail"),**
    #ex: /polls/5/results
    path("<int:question_id>/results/", views.results, name="results"),
    #ex: /polls/5/vote
    path("<int:question_id>/vote/", views.vote, name="votes"),    
]

# "< >/ is the way we pass parameters and variables through the url we are setting"

at index,html

{% if latest_question_list %}
    <ul>
        {% for question in latest_question_list %}
            <li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>
        {% endfor %}
    </ul>
{% else %}
    <p>No polls are available 😓.</p>
{% endif %}

Hard-code: Término del mundo de la informática que hace referencia a una práctica en el desarrollo de software que consiste en incrustar datos directamente en el código fuente del programa.

Para evitar el hard-code en nuestro programa vamos a usar la etiqueta url en el archivo index.html

            <li><a href="{% url 'polls:detail' question.id %}">
                {{ question.question_text }}
            </a></li>

Para que la url funcione de forma adecuada debemos asignar el nombre de nuestra aplicación en la variable app_name = "polls"

De esta forma se puede con libertad cambiar las urls sin afectar los templates o archivos asociados.

Por si alguien tiene la duda:

{% url 'pollos:detalle' question.id %}

El primer parámetro que recibe la etiqueta URL es el app_name, en este caso app_name = “pollos”.

El segundo parámetro lo saca del name que definió en el path, en este caso name = “detalle”.

El tercer parámetro es el identificador de la pregunta.

Que prooo