Code

Opened 5 years ago

Closed 4 years ago

Last modified 6 months 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 kmtracey)

I am pretty sure I was following *exactly*

tutorial url: http://docs.djangoproject.com/en/dev/intro/tutorial04/#intro-tutorial04

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:


Environment:

Request Method: GET
Request URL: http://localhost:8000/polls/2/vote/
Django Version: 1.1.1
Python Version: 2.6.1
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'mysite.polls',
 'django.contrib.admin']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware')


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/{{ poll.id }}/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="{{ choice.id }}" />


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


   10 : {% endfor %}


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


   12 : </form>


   13 : 

Traceback:
File "C:\python26\Lib\site-packages\django\core\handlers\base.py" in get_response
  92.                 response = callback(request, *callback_args, **callback_kwargs)
File "d:\temp\django1\mysite\..\mysite\polls\views.py" in vote
  50.         }, context_instance=RequestContext(request))
File "C:\python26\Lib\site-packages\django\shortcuts\__init__.py" in render_to_response
  20.     return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
File "C:\python26\Lib\site-packages\django\template\loader.py" in render_to_string
  103.         t = get_template(template_name)
File "C:\python26\Lib\site-packages\django\template\loader.py" in get_template
  82.     template = get_template_from_string(source, origin, template_name)
File "C:\python26\Lib\site-packages\django\template\loader.py" in get_template_from_string
  90.     return Template(source, origin, name)
File "C:\python26\lib\site-packages\django\template\__init__.py" in __init__
  168.         self.nodelist = compile_string(template_string, origin)
File "C:\python26\lib\site-packages\django\template\__init__.py" in compile_string
  189.     return parser.parse()
File "C:\python26\lib\site-packages\django\template\__init__.py" in parse
  283.                     self.invalid_block_tag(token, command)
File "C:\python26\lib\site-packages\django\template\__init__.py" 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!

Regards,
Simon

Attachments (0)

Change History (7)

comment:1 Changed 5 years ago by kmtracey

  • Description modified (diff)
  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset
  • Resolution set to duplicate
  • Status changed from new to closed

(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: http://docs.djangoproject.com/en/1.1/intro/tutorial04/#intro-tutorial04

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

comment:2 Changed 4 years ago by datakid

  • Resolution duplicate deleted
  • Status changed from closed to reopened
  • Version changed from 1.1 to SVN

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: .
URL: http://code.djangoproject.com/svn/django/trunk
Repository Root: http://code.djangoproject.com/svn
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/basehttp.py", line 279, in run
    self.result = application(self.environ, self.start_response)

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

  File "/usr/lib/pymodules/python2.6/django/core/handlers/wsgi.py", line 230, in __call__
    self.load_middleware()

  File "/usr/lib/pymodules/python2.6/django/core/handlers/base.py", 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 4 years ago by russellm

  • Resolution set to duplicate
  • Status changed from reopened to closed

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 4 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 4 years ago by datakid

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

comment:6 Changed 4 years ago by lukeplant

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 6 months ago by anonymous

  • Easy pickings unset
  • Severity set to Normal
  • Type set to Uncategorized
  • UI/UX unset

Add Comment

Modify Ticket

Change Properties
<Author field>
Action
as closed
as The resolution will be set. Next status will be 'closed'
The resolution will be deleted. Next status will be 'new'
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.