¿Cómo identificar un ancla en una url en Django?

Estoy haciendo una presentación de diapositivas y cada diapositiva tiene un formato de URL como este: articles/1234#slide=5 . Quiero recuperar la parte slide=5 de la url en mi archivo url.py y luego pasarla a la función de vista correspondiente y, finalmente, pasarla a la plantilla y renderizar la diapositiva derecha. La configuración de url es la siguiente:

 url(r'^(?P
\d+)#slide=(?P\d{1,2})$', 'articles.views.show_article')

Pero parece que no puede obtener la variable current_slide de la url. Supongo que tiene algo que ver con la parte delimitada porque no se transfiere al servidor. Pero si ignoro la parte de anclaje en mi configuración de url y uso javascript para manejar este hashtag, parece que cada vez que ingreso la url en el navegador, primero muestra la página sin la parte de anclaje y luego salta a la diapositiva derecha que quiero. No puede renderizar la diapositiva derecha directamente. ¿Cómo podría arreglar esto?

Lo golpeas en tu pregunta. La parte de anclaje de la URL no se pasa al servidor, solo se usa en el lado del cliente. ¿Por qué no usar los parámetros estándar de obtención:

 articles/1234?slide=5 

Ya que estás atascado con este formato de URL, es posible que desees utilizar un desplazamiento animado de algún tipo que pueda hacer que esto sea menos molesto, ¿verificas las respuestas a esta pregunta para obtener un desplazamiento suave a un ancla?

Ningún navegador envía el “hashtag” al servidor.

Una de las formas comunes de evitar esto es hacer que un javascript capture el hashtag al cargar / leer, y llame a una función para inicializar la página (a través de ajax).

Además, el término común para esto es “hashbang url”. Si busca ese término, encontrará mucha más información relevante.

La página está saltando, porque # se usa para apuntar a los anclajes de página en la especificación HTML. http://example.com/gallery/1234#slide5 le dice al navegador que vaya al ancla slide5 en http://example.com/gallery/1234

El ancla (bit después del #) no es parte del bit de la URL que coincide. Se utilizan para un ancla (es decir, un enlace) dentro de una página. Por lo general, son para el beneficio del navegador (de modo que el navegador puede desplazarse hasta esa parte de la página) no del servidor, pero la gente parece estar abusando de ellos en estos días. No es sorprendente que Django no los recoja porque no se consideran una parte útil de la URL del servidor.

Aquí está la documentación de una especificación anterior de HTML, pero sigue siendo válida: http://www.w3.org/TR/html4/struct/links.html#h-12.2.3

Cómo hacerlo:

Si desea obtener esto en su vista, busque en el objeto Solicitar. Busque en la request.path_info o request.path . Eso te dará la URL completa. Puedes usar una expresión regular para extraerla desde allí.

 import re input = "articles/1234#slide=5" m = re.search("#slide=([0-9]*)", input) try: print int(m.group(1)) except ValueError: print "didn't get a number" 

Como dijo Rob, deberías usar un parámetro de obtención para esto.