Opened 7 years ago

Closed 7 years ago

Last modified 3 years ago

#12177 closed Uncategorized (duplicate)

Error in part 4 of the tutorial?

Reported by: simon_k Owned by: nobody
Component: Documentation Version: master
Severity: Normal Keywords:
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Karen Tracey)

I am pretty sure I was following *exactly*

tutorial url:

The (apparent) error in code shown at the top of the page (the template for the "simple form")

Start of output resulting response from dev server:


Request Method: GET
Request URL: http://localhost:8000/polls/2/vote/
Django Version: 1.1.1
Python Version: 2.6.1
Installed Applications:
Installed Middleware:

Template error:
In template d:\temp\django1\mysite\polls\templates\polls\detail.html, error at line 6
   Invalid block tag: 'csrf_token'
   1 : <h1>{{ poll.question }}</h1>

   2 : 

   3 : {% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}

   4 : 

   5 : <form action="/polls/{{ }}/vote/" method="post">

   6 :  {% csrf_token %} 

   7 : {% for choice in poll.choice_set.all %}

   8 :     <input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ }}" />

   9 :     <label for="choice{{ forloop.counter }}">{{ choice.choice }}</label><br />

   10 : {% endfor %}

   11 : <input type="submit" value="Vote" />

   12 : </form>

   13 : 

File "C:\python26\Lib\site-packages\django\core\handlers\" in get_response
  92.                 response = callback(request, *callback_args, **callback_kwargs)
File "d:\temp\django1\mysite\..\mysite\polls\" in vote
  50.         }, context_instance=RequestContext(request))
File "C:\python26\Lib\site-packages\django\shortcuts\" in render_to_response
  20.     return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
File "C:\python26\Lib\site-packages\django\template\" in render_to_string
  103.         t = get_template(template_name)
File "C:\python26\Lib\site-packages\django\template\" in get_template
  82.     template = get_template_from_string(source, origin, template_name)
File "C:\python26\Lib\site-packages\django\template\" in get_template_from_string
  90.     return Template(source, origin, name)
File "C:\python26\lib\site-packages\django\template\" in __init__
  168.         self.nodelist = compile_string(template_string, origin)
File "C:\python26\lib\site-packages\django\template\" in compile_string
  189.     return parser.parse()
File "C:\python26\lib\site-packages\django\template\" in parse
  283.                     self.invalid_block_tag(token, command)
File "C:\python26\lib\site-packages\django\template\" in invalid_block_tag
  335.         raise self.error(token, "Invalid block tag: '%s'" % command)

Exception Type: TemplateSyntaxError at /polls/2/vote/
Exception Value: Invalid block tag: 'csrf_token'

End of output resulting response from dev server:

... by the way nice tutorial!


Change History (7)

comment:1 Changed 7 years ago by Karen Tracey

Description: modified (diff)
Needs documentation: unset
Needs tests: unset
Patch needs improvement: unset
Resolution: duplicate
Status: newclosed

(Reformatted description, please use the preview button and WikiFormatting.)

The problem is you are using the latest-development-level docs with a released level of the code, which does not have some of the recent changes introduced in trunk. Specifically, csrf_token does not exist in 1.1.1 or earlier. You can fix the problem you see by just deleting it from your template.

The 1.1 level of the tutorial part 4 is here:

(The problem of there being no link to the 1.1.1 docs is covered by #12155.)

comment:2 Changed 7 years ago by datakid

Resolution: duplicate
Status: closedreopened
Version: 1.1SVN

Hmm, this response is what I read about the traps, which is fine except I'm using django-trunk - updated this morning:

musicman@brunswick:~/source/django-trunk$ svn info
Path: .
Repository Root:
Repository UUID: bcc190cf-cafb-0310-a4f2-bffc1f526a37
Revision: 12205
Node Kind: directory
Schedule: normal
Last Changed Author: zgoda
Last Changed Rev: 12205
Last Changed Date: 2010-01-11 20:25:10 +1100 (Mon, 11 Jan 2010)

Then I followed the dev instructions and am still getting errors, although they are new ones:

Traceback (most recent call last):

  File "/usr/lib/pymodules/python2.6/django/core/servers/", line 279, in run
    self.result = application(self.environ, self.start_response)

  File "/usr/lib/pymodules/python2.6/django/core/servers/", line 651, in __call__
    return self.application(environ, start_response)

  File "/usr/lib/pymodules/python2.6/django/core/handlers/", line 230, in __call__

  File "/usr/lib/pymodules/python2.6/django/core/handlers/", line 46, in load_middleware
    raise exceptions.ImproperlyConfigured, 'Middleware module "%s" does not define a "%s" class' % (mw_module, mw_classname)

ImproperlyConfigured: Middleware module "django.contrib.csrf" does not define a "CsrfViewMiddleware" class

From the dev instructions I've taken the new MIDDLEWARE_CLASS 'django.middleware.csrf.CsrfViewMiddleware' but otherwise have followed tutorial instructions (ie, I'm using the RequestContext section of part 3 in teh csrf instructions...)

comment:3 Changed 7 years ago by Russell Keith-Magee

Resolution: duplicate
Status: reopenedclosed

It sounds like you're not following the tutorial exactly. If you're following the tutorial, you shouldn't need to delve into the CSRF documention at all - you should only need to follow the steps that the tutorial gives you. Also, django.middleware.csrf.CsrfViewMiddleware clearly does exist in trunk, as does the csrf_token template tag.

I don't know exactly what is going wrong with your particular setup; until we know there is a specific problem with the tutorial, this isn't something that should be in Trac. Please follow this up on Django-users and explain exactly what you have done; if it turns out that there is a problem with the tutorial, we can open a new ticket.

comment:4 Changed 7 years ago by datakid

fwiw, the tutorial _doesn't_ work. Feel free to test yourself. I have been advised by #django irc to move back to stable.

comment:5 Changed 7 years ago by datakid

I apologise for being a pedant - please ignore this last comment.

comment:6 Changed 7 years ago by Luke Plant

In case you didn't find your problem yet, I notice that the directory that contains your SVN checkout (~/source/django-trunk) does not appear in your tracebacks (which contain /usr/lib/pymodules/python2.6/django/...). This indicates that your SVN checkout is not being used i.e. it's not at an appropriate place on your PYTHONPATH. I recommend virtualenv for sorting this kind of thing out.

comment:7 Changed 3 years ago by anonymous

Easy pickings: unset
Severity: Normal
Type: Uncategorized
UI/UX: unset
Note: See TracTickets for help on using tickets.
Back to Top