我对python和django很新。我知道这个错误表明了什么。这是说我需要将视图导入到网址中。奇怪的是在我的笔记本电脑上运行正常并加载页面,但在我的桌面上它不是。我正在使用git repo,只是从我的笔记本电脑中取出了工作变化。我在两台机器上使用相同的Python解释器(3.5.3)。我得到与标题所述的所有URL相同的错误消息。
这是Full Stack
Unhandled exception in thread started by <function check_errors.
<locals>.wrapper at 0x000001FA9FAB7400>
Traceback (most recent call last):
File "C:\Users\Rpg Legend\mm\lib\site-packages\django\utils\autoreload.py", line 226, in wrapper
fn(*args, **kwargs)
File "C:\Users\Rpg Legend\mm\lib\site-packages\django\core\management\commands\runserver.py", line 121, in inner_run
self.check(display_num_errors=True)
File "C:\Users\Rpg Legend\mm\lib\site-packages\django\core\management\base.py", line 374, in check
include_deployment_checks=include_deployment_checks,
File "C:\Users\Rpg Legend\mm\lib\site-packages\django\core\management\base.py", line 361, in _run_checks
return checks.run_checks(**kwargs)
File "C:\Users\Rpg Legend\mm\lib\site-packages\django\core\checks\registry.py", line 81, in run_checks
new_errors = check(app_configs=app_configs)
File "C:\Users\Rpg Legend\mm\lib\site-packages\django\core\checks\urls.py", line 14, in check_url_config
return check_resolver(resolver)
File "C:\Users\Rpg Legend\mm\lib\site-packages\django\core\checks\urls.py", line 24, in check_resolver
for pattern in resolver.url_patterns:
File "C:\Users\Rpg Legend\mm\lib\site-packages\django\utils\functional.py", line 35, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "C:\Users\Rpg Legend\mm\lib\site-packages\django\urls\resolvers.py", line 313, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "C:\Users\Rpg Legend\mm\lib\site-packages\django\utils\functional.py", line 35, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "C:\Users\Rpg Legend\mm\lib\site-packages\django\urls\resolvers.py", line 306, in urlconf_module
return import_module(self.urlconf_name)
File "C:\Python35\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 673, in exec_module
File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
File "C:\Users\Rpg Legend\PycharmProjects\matchmaker\src\matchmaker\urls.py", line 9, in <module>
url(r'^$', 'newsletter.views.home', name='home'),
File "C:\Users\Rpg Legend\mm\lib\site-packages\django\conf\urls\__init__.py", line 85, in url
raise TypeError('view must be a callable or a list/tuple in the case of include().')
TypeError: view must be a callable or a list/tuple in the case of include().
媒(项目/主)/urls.py:
from django.conf import settings
from django.conf.urls import include, url
from django.conf.urls.static import static
from django.contrib import admin
urlpatterns = [
url(r'^$', 'newsletter.views.home', name='home'),
url(r'^contact/$', 'newsletter.views.contact', name='contact'),
url(r'^question/$', 'questions.views.home', name='question_home'),
url(r'^about/$', 'matchmaker.views.about', name='about'),
]
通讯/ views.py
from django.conf import settings
from django.core.mail import send_mail
from django.shortcuts import render
from questions.models import Question
from .forms import ContactForm, SignUpForm
# Create your views here.
def home(request):
title = 'Sign Up Now'
form = SignUpForm(request.POST or None)
context = {
"title": title,
"form": form
}
def contact(request):
title = 'Contact Us'
title_align_center = True
form = ContactForm(request.POST or None)
if form.is_valid():
form_email = form.cleaned_data.get("email")
form_message = form.cleaned_data.get("message")
form_full_name = form.cleaned_data.get("full_name")
subject = 'Site contact form'
from_email = settings.EMAIL_HOST_USER
to_email = [from_email, 'youotheremail@email.com']
contact_message = "%s: %s via %s" % (
form_full_name,
form_message,
form_email)
some_html_message = """
<h1>hello</h1>
"""
send_mail(subject,
contact_message,
from_email,
to_email,
html_message=some_html_message,
fail_silently=True)
context = {
"form": form,
"title": title,
"title_align_center": title_align_center,
}
return render(request, "forms.html", context)
媒/ views.py
from django.shortcuts import render
def about(request):
return render(request, "about.html", {})
我希望得到一些帮助或指导。每当我做这样的事情时:
from app_name import views
from newsletter.views import home, contact
Pycharm将其删除,并说它是一个未使用的import语句。在我参与的其他几个项目中,我不需要将任何视图导入到main / project urls.py中。
答案 0 :(得分:1)
您已根据需要将视图导入到您的网址,但您错过了下一步使用网址模式中的视图而不是虚线字符串路径
from newsletter.views import home, contact
urlpatterns = [
url(r'^$', home, name='home'),
url(r'^contact/$', contact, name='contact'),
...
]
在网址模式中使用视图后,PyCharm不应再将其标记为未使用的导入。
在Django 1.10中删除了对虚线字符串路径的支持。如果你的代码在一台机器上运行而在另一台机器上运行,那么听起来你正在运行两个不同版本的Django。尝试在所有计算机上安装相同的软件包版本以避免此类问题非常重要。如果您还没有(try this article),请了解pip freeze
和要求文件。
答案 1 :(得分:0)
您的home
方法尚未return
呈现的模板,这是预期的。
return render(request, "home.html", context)
渲染home
视图不适用于笔记本电脑或其他任何地方的当前情况。据我所知,旧版本也都会失败。
自1.10以来,Django也不支持导入路径,但你应该这样做 导入视图,并将其传递到您的网址。
from newsletter import views as newsletter_views
from questions import views as question_views
from matchmaker import views as matchmaker_views
urlpatterns = [
url(r'^$', newsletter_views.home, name='home'),
url(r'^contact/$', newsletter_views.contact, name='contact'),
url(r'^question/$', question_views.home, name='question_home'),
url(r'^about/$', matchmaker_views.about, name='about'),
]
您应该最好将不同的应用分成每个应用的差异urls.py
文件,以防止命名空间冲突。