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

260
Views
¿Por qué las URL de django terminan con una barra inclinada?

La documentación oficial de Django y otros tutoriales en la web siempre usan una barra inclinada al final de la URL. ex:

 url(r'^accounts/login/', views.login) # login view in turn calls login.html # instead of url(r'^accounts/login', views.login)

Dado que las accounts son el directorio y el inicio de login (login.html) es el archivo, ¿no deberíamos usar una segunda URL? Esto también hará que los parámetros GET se vean más estructurados:

 accounts/login?name='abc' # login is a file that is accepting parameters vs. accounts/login/?name='abc' # login directory (maybe index) is accepting parameters??
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Una de las filosofías de diseño centrales de Django es que las URL deben ser hermosas.

Por lo tanto, algunas direcciones URL como accounts/detail?name='abc' deben asignarse como accounts/detail/abc/ . Puede capturarlo usando expresiones regulares en las configuraciones de su URL. Aquí la URL es bastante ordenada y fácil de usar. Esto ayudará a los motores de búsqueda a indexar correctamente tus páginas (ahora puedes olvidarte de rel=canonical ) y ayudará en el seo.

Ahora, el motivo de una barra diagonal final, considere una vista (en cualquier marco) que resuelva relativamente about.html para un usuario en la ruta, users/awesomeUser

dado users/awesomeUser y users/awesomeUser/ son diferentes,

  1. Si el usuario está en users/awesomeUser , el navegador lo resolverá como users/about.html porque no hay una barra inclinada final que no queremos

  2. Si el usuario está en users/awesomeUser/ , el navegador lo resolverá como users/awesomeUser/about.html porque hay una barra inclinada al final

  • child relativo a family/parent/ es family/parent/child .
  • child relativo a family/parent es family/child .

La filosofía de diseño de Django en lecturas de URL definitivas ,

Técnicamente, foo.com/bar y foo.com/bar/ son dos URL diferentes, y los robots de los motores de búsqueda (y algunas herramientas de análisis de tráfico web) las tratarían como páginas separadas. Django debería hacer un esfuerzo por "normalizar" las URL para que los robots de los motores de búsqueda no se confundan.

Este es el razonamiento detrás de la configuración de APPEND_SLASH. (APPEND_SLASH le permite forzar la adición de barras a una URL)

¿Todavía no está convencido?

  1. Dado que Django observa que ambas URL son diferentes, si está almacenando en caché su aplicación, Django mantendrá dos copias para la misma página en user/awesomeUser y user/awesomeUser/ .
  2. Debe tener problemas con los métodos HTTP que no sean GET si no agrega una barra inclinada a una URL (si alguna vez planea crear una API REST).

Actualizar

No puede hacer que los métodos POST/PUT/PATCH/DELETE funcionen con rest_framework a menos que defina explícitamente APPEND_SLASH=False en la configuración y trailing_slash=False para todos y cada uno de los enrutadores que debe usar (si usa enrutadores). Es como si básicamente te saltases esto la mayoría de las veces y tuvieras que perder mucho tiempo depurándolo. Django recomienda append slashes y no lo fuerza.

Depende del desarrollador agregar barras o no.

over 4 years ago · Santiago Trujillo Report

0

De los documentos para el middleware que usa APPEND_SLASH

un indexador de motor de búsqueda los trataría como URL separadas, por lo que es una buena práctica normalizar las URL.

Django no lo requiere, solo intenta ayudar a su SEO sugiriendo una forma estándar de hacer URL.

Sí, sé que la barra inclinada no tiene nada que ver con este middleware, pero esta es la mejor explicación que pude encontrar sobre una posible razón.

over 4 years ago · Santiago Trujillo Report

0

Esto ayuda a definir la estructura de su sitio web. Aunque django puede admitir cualquier cosa ingresada después del dominio que se pasa al servidor, hacerlo de esta manera le permite agregar fácilmente "subpáginas" a la URL sin que parezca accounts/loginreset?id=alkfjahgouasfjvn25jk1k25

Habiendo dicho eso en el caso anterior, puede tener sentido dejarlo fuera.

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!