user192048
user192048

Reputation: 475

url template tag in django template

I was trying to use the url template tag in django, but no lucky,

I defined my urls.py like this

urlpatterns = patterns('',
    url(r'^analyse/$',              views.home,  name="home"),
    url(r'^analyse/index.html',     views.index, name="index"),
    url(r'^analyse/setup.html',     views.setup, name="setup"),
    url(r'^analyse/show.html',      views.show,  name="show"),
    url(r'^analyse/generate.html',  views.generate, name="generate"),

I defined the url pattern in my view like this

{% url 'show'%}

then I got this error message

Caught an exception while rendering: Reverse for ''show'' with arguments '()' and keyword arguments '{}' not found.

Original Traceback (most recent call last): File "/Library/Python/2.5/site-packages/django/template/debug.py", line 71, in render_node result = node.render(context) File "/Library/Python/2.5/site-packages/django/template/defaulttags.py", line 155, in render nodelist.append(node.render(context)) File "/Library/Python/2.5/site-packages/django/template/defaulttags.py", line 382, in render raise e NoReverseMatch: Reverse for ''show'' with arguments '()' and keyword arguments '{}' not found.

I am wondering why django failed to render? what is the right way to define it in the tempalte?

Upvotes: 12

Views: 29368

Answers (6)

Django 1.5 or above:

{% url 'show'%}

Django 1.4 or below:

{% url show %}

*You can see Django 1.5 release notes.

Upvotes: 0

iskorum
iskorum

Reputation: 1137

IMPORTANT: this was for django 1.4. At django 1.5 it is just the opposite.

try using url names without quotes

{% url show %}

not this

{% url 'show'%}

Upvotes: 13

user1283043
user1283043

Reputation: 300

You maybe have some views not implemented yet. It looks like the template engine tries to find all views from the patterns in urls.py when the {% url ... %} filter is used.

It usually shows an error for your last pattern in urls.py.

Try comment out every url pattern you did not implement yet.

Also make sure you use the full path:

{% url myapp.views.home %}

The url template filter looks really unstable. Try to keep future compatibility.

Upvotes: 3

Lance McNearney
Lance McNearney

Reputation: 9490

You may need to be a little more specific on which view you're trying to use:

{% url appname.views.show %}

Upvotes: 1

rh0dium
rh0dium

Reputation: 7052

The problem is your single quotes around 'show'. Change this to "show" and it should work out for you.

See here

Upvotes: 10

SleighBoy
SleighBoy

Reputation: 501

For what is is worth, I had the same issue and while I do not remember the reason why now, this resolved it for me. Example from a SCRUM app I was working on.

url(r'^$', 'scrum.views.index',  name='scrum-index'),

Upvotes: 0

Related Questions