开发者

Django url template tag: 'module' object has no attribute 'views'

The tag in question:

< a href="{% url django.contrib.auth.views.login %}">Login< /a>

URLConf:

from django.contrib.auth import views <br />
...<br />
(r开发者_JAVA技巧'^login/$',views.login, {'redirect_field_name' : '/' })
<br />...


it's better to use named urls, they save a lot of maintenance work in the future and typing in the first place.

if you keep name of the url the same, you can rename view function, move it to a different app, etc. you won't need to change templates or other places using this url at all.

in urls.py:

url(r'^login/',path.to.view,name='login',...)

in templates:

<a href="{%url login%}">login here</a>

in views:

login_url = reverse('login')


For some reason it didn't like the way I was importing it.

Solution:

from django.contrib.auth.views import login

(r'^login', login, etc.)


I believe I have some thing to contribute to this question.

What was strange for me is that my code made sense in terms of how I was using it but it would not work.

If in my urls I tried the following. Where helloworld is my django app name.

import helloworld
...
url(r'^test', helloworld.views.home1() , name='home'),

It produces an error. Even though technically every thing is correct. I have imported my app which is a python module automatically created by django manage startapp

module' object has no attribute 'views'

I found the source code for the django project site on github and had a look at how they do their imports in the urls section of their app. Go and have a look at this project on github. It is an excellent reference for a large scale project implementation. There is a lot to learn there. https://github.com/django/djangoproject.com.

This is how they do their imports and url configuration.

from accounts import views as account_views
...
url(r'^~(?P<username>[\w-]+)/$', account_views.user_profile, name='user_profile'),

So I modified my code to something similar

import helloworld.views as helloView
...
url(r'^test', helloView.home1 , name='home'),

This is most likely some thing to do with the app / project / python namespaces. I am not entirely sure. But my code works as expected and I can still have my different apps in their own respective namespaces. I just need to make sure that the import app.view as somename is unique in the app / project / python namespace scheme.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜