2011-06-20 43 views

Respuesta

6

Esto es algo que normalmente quiere hacer en un archivo con el views.py reverse() auxiliar para URL con nombre con argumentos conocidos o resolve() para rutas.

Si necesita esta funcionalidad en una plantilla en concreto, aquí es una solución hacky:

@register.simple_tag 
def urlpath_exists(name): 
    """Returns True for successful resolves()'s.""" 
    try: 
     return bool(resolve(path)) 
    except Resolver404: 
     return False 

Nota: esto no garantiza que la URL es válida, sólo que había una coincidencia de patrón .

0

Supongo que no hay un método simple para hacer esto. Así que escribí un templatetag simple que toma el nombre URL y llamar al método inverso para él y poner en marcha atrás try..except:

try: 
    result = reverse(url) 
except: 
    result = None 
return result 
1

Digamos que su nombre de proyecto es ficticio. Luego,

from dummy.urls import urlpatterns 
def find_url(url): 
    for e in urlpatterns: 
    if e.regex.match(url): 
     print 'found!' #or do whatever you want 
     return   #then exit the procedure. 
    print 'not found!' 
5

Puede usar la forma "como" de la etiqueta url para verificar si existe una URL con nombre.

{% url path.to.view as the_url %} 
{% if the_url %} 
    <a href="{{ the_url }}">Link to optional stuff</a> 
{% endif %} 

Cuando se utiliza "as", no se produce una excepción.

Cuestiones relacionadas