Тег шаблона URL Django: у объекта 'module' нет атрибута 'views' - PullRequest
4 голосов
/ 14 ноября 2009

Тег в вопросе:

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

привязки:

from django.contrib.auth import views <br />
...<br />
(r'^login/$',views.login, {'redirect_field_name' : '/' })
<br />...

Ответы [ 3 ]

5 голосов
/ 16 ноября 2009

лучше использовать именованные URL-адреса, они сэкономят много времени на обслуживании и в первую очередь будут печатать.

Если вы сохраняете имя URL-адреса одинаковым, вы можете переименовать функцию просмотра, переместить ее в другое приложение и т. Д. Вам вообще не нужно будет менять шаблоны или другие места, используя этот URL-адрес.

в urls.py:

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

в шаблонах:

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

просмотров:

login_url = reverse('login')
4 голосов
/ 14 ноября 2009

Почему-то мне не понравилось, как я его импортировал.

Решение:

from django.contrib.auth.views import login

(r'^login', login, etc.)
0 голосов
/ 20 августа 2014

Полагаю, у меня есть кое-что, чтобы внести вклад в этот вопрос.

Что было для меня странным, так это то, что мой код имел смысл с точки зрения того, как я его использовал, но он не будет работать.

Если в своих URL я попробовал следующее. Где helloworld - мое имя в приложении Django.

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

Выдает ошибку. Хотя технически все правильно. Я импортировал свое приложение, представляющее собой модуль Python, автоматически созданный django manage startapp

module' object has no attribute 'views'

Я нашел исходный код для сайта проекта django на github и посмотрел, как они делают свой импорт, в разделе URL-адресов своего приложения. Иди и взгляни на этот проект на github. Это отличная ссылка для реализации крупномасштабного проекта. Там есть чему поучиться. https://github.com/django/djangoproject.com.

Вот как они делают свой импорт и настройку URL.

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

Итак, я изменил свой код на что-то похожее

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

Скорее всего, это связано с пространствами имен app / project / python. Я не совсем уверен. Но мой код работает, как и ожидалось, и у меня все еще могут быть разные приложения в соответствующих им пространствах имен. Мне просто нужно убедиться, что import app.view as somename уникален в схеме пространства имен app / project / python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...