Estoy creando un sitio de videos. Quiero que mis URL directas a un video se vean como example.com/watch/this-is-a-slug-1 donde 1 es la identificación del video. Aunque no quiero que la babosa importe. example.com/watch/this-is-another-slug-1 debe señalar a la misma página. En SO,/questions/id es la única parte de la url que importa. ¿Cómo puedo hacer eso?¿Cómo puedo hacer que las URL en Django sean similares a stackoverflow?
Respuesta
desbordamiento de pila utiliza la forma
example.com/watch/1/this-is-a-slug
que es más fácil de manejar. Estás abriendo una lata de gusanos si quieres que la ID esté al final de la ficha de slug, ya que entonces (por ejemplo) restringirá los tipos de babosas que puedes usar o simplemente te hará más difícil.
Se puede utilizar un controlador de URL como:
(r'^watch/(?P<id>\d+)/', 'watch')
a agarrar sólo el ID e ignoran nada después de la ID. (Tenga en cuenta que no hay $
carácter de fin de línea.)
Con todo el respeto debido a Stackoverflow, esta es la forma incorrecta de hacerlo. No debería necesitar tener dos elementos en la URL que identifica la página. La identificación es irrelevante, es basura. Debería poder identificar de forma única una página solo de la babosa.
¿Qué hay de los títulos duplicados? ¿O el hecho de que los personajes simplemente se eliminan de la babosa? Las preguntas tituladas "Punteros en C++" y "Punteros en C" obtendrían la misma babosa, y sería imposible crear una pregunta con un título existente, o la pregunta anterior sería inaccesible. El ID es el identificador único, y el slug es para ser humano/motor de búsqueda/etc. amigable. –
No he usado Django pero he usado frameworks MVC anteriormente. En general, tienen algún tipo de función de enrutamiento de URL que le permite definir un patrón (generalmente una expresión regular) que se asigna a un controlador.
Esto podría ser un buen punto de partida: http://docs.djangoproject.com/en/dev/topics/http/urls/
Como se dijo Jesse Beder, sólo se necesitaría la expresión regular para coincidir con el primer segmento de URL (/ reloj) y una identificación numérica, y luego hacia adelante que a un controlador de reloj, que trataría con la ID e ignoraría la babosa.
- 1. administrador de Django: ¿cómo hacer que las "líneas" sean colapsables?
- 2. ¿Cómo puedo hacer que las texturas sean transparentes en OpenGL?
- 3. ¿Cómo hacer que las propiedades sean privadas?
- 4. Cómo hacer que los mensajes django estilo StackOverflow?
- 5. wiki alojado usando las herramientas de edición similares a StackOverflow?
- 6. Hacer que las URL de Django funcionen con o sin/
- 7. Cómo hacer que las urls sean seguras en GAE usando django_wsgi built-in
- 8. ¿Cómo puedo hacer que los enlaces sean blancos?
- 9. Cómo enrutar las URL en Play 2.0 para que sean indiferentes a una barra inclinada final
- 10. ¿Cómo hacer que mis aplicaciones sean "personalizables"?
- 11. ¿Cómo hacer que las páginas php/html sean seguras/https?
- 12. ¿Cómo puedo hacer que los elementos HTML no sean resaltables?
- 13. ¿Cómo puedo hacer que las excepciones silenciosas sean más fuertes en tkinter?
- 14. ¿Cómo puedo hacer que las devoluciones de eventos en mis formularios de win sean seguras?
- 15. ¿Cómo puedo hacer que las propiedades de los archivos de propiedades sean obligatorias en Spring?
- 16. ¿Cómo puedo hacer que las cookies sean seguras (solo https) por defecto en los rieles?
- 17. Hacer que las clases de servicio de primavera sean definitivas?
- 18. ¿Cómo puedo hacer las combinaciones de git de tal manera que sean fáciles de revertir?
- 19. ¿Cómo hacer que las imágenes alojadas en Amazon S3 sean menos públicas pero no completamente privadas?
- 20. Algoritmo deseado: Encuentre todas las palabras de un diccionario que sean similares a las palabras en un texto libre
- 21. Shoulda + FactoryGirl: ¿Puedo hacer que mis pruebas sean más rápidas?
- 22. ¿Cómo generar una URL compleja como stackoverflow?
- 23. ¿Cómo puedo hacer que los controles de Silverlight sean invisibles para las acciones del mouse?
- 24. ¿Cómo puedo hacer que las etiquetas xtick de un diagrama sean dibujos simples usando matplotlib?
- 25. ¿Cómo hacer que las celdas sean de solo lectura en las hojas de cálculo?
- 26. DataGridView: ¿Cómo hacer que algunas celdas sean no seleccionables?
- 27. ¿Cómo puedo probar las conexiones https con Django tan fácilmente como puedo conexiones que no sean https usando 'runserver'?
- 28. ¿Qué puede hacer que las llamadas a CreateFile en un puerto serie sean extremadamente lentas?
- 29. ¿Cómo hago que las URL en Ruby on Rails sean amigables con SEO sabiendo un @ vendor.name?
- 30. ¿Puedo redirigir a otra URL en un django TemplateView?
Hmm, gracias por ese consejo. ¿Sería difícil obtener la identificación si fuera example.com/watch/1-this-is-a-slug? Además, si estas preguntas parecen tontas, ¡lo siento! Este es el primer sitio que estoy desarrollando en realidad, en lugar de solo diseñar y diseñar. Gracias por tu ayuda. –
@Matt, no sería tan difícil, pero ¿por qué quieres? Es una práctica bastante común hacer lo que hace Stack Overflow. –
Sinceramente, no estoy seguro de por qué me gustaría hacer eso. Si/id/slug es aceptable, lo haré. Gracias de nuevo. –