【问题标题】:django name render is not defineddjango 名称渲染未定义
【发布时间】:2016-06-16 13:25:46
【问题描述】:

当我尝试在我的程序中导入渲染时出现错误,我担心这是因为 django 1.9 不支持它。 我正在使用python 3.4django 1.9。 当我尝试运行我的服务器时,出现错误:

ImportError: cannot import name render`。

这是我的代码:

博客/浏览量:

from datetime import datetime
from django.shortcuts import render

def date_actuelle(request):
    return render(request, 'blog/date.html', {'date': datetime.now()})


def addition(request, nombre1, nombre2):   
    total = int(nombre1) + int(nombre2)

    # Retourne nombre1, nombre2 et la somme des deux au tpl
    return render(request, 'blog/addition.html', locals())

博客/网址:

from django.conf.urls import url, patterns
from . import views

urlpatterns = [
  #  url(r'^accueil/$', views.home),
  #  url(r'^article/(?P<id_article>\d+)$', views.view_article),
  #  url(r'^article/(?P<year>\d{4})/(?P<month>\d{2})$', views.list_articles),
  #  url(r'^redirection$', views.view_redirection),
    url(r'^date/$', views.date_actuelle),
    url(r'^addition/(?P<nombre1>\d+)/(?P<nombre2>\d+)/$', views.addition),
]

creps_bretonnes.urls:

from django.conf.urls import patterns, include, url
from django.contrib import admin
from blog import views
urlpatterns = [
    url(r'^blog/', include('blog.urls')),
]

我也尝试过 from django.shortcuts import *,然后服务器启动,但是当我尝试访问页面时,它显示 NameError: name 'render' is not defined。 你有什么想法吗?

我运行时服务器上写了什么:

cmd values when trying to run the server with from django.shortcuts import render

使用 from django.shortcuts import * 并尝试访问 localhost:8000/blog/date 时的回溯

Environment:


Request Method: GET
Request URL: http://localhost:8000/blog/date/

Django Version: 1.9.7
Python Version: 3.4.4
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "C:\Python34\lib\site-packages\django\core\handlers\base.py" in             get_response
  149.                     response = self.process_exception_by_middleware(e, request)

File "C:\Python34\lib\site-packages\django\core\handlers\base.py" in get_response
  147.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\sperney\Documents\Travail\creps_bretonnes\blog\views.py" in date_actuelle
  37.     return render(request, 'blog/date.html', {'date': datetime.now()})

Exception Type: NameError at /blog/date/
Exception Value: name 'render' is not defined

这里是:

    """
This module collects helper functions and classes that "span" multiple levels
of MVC. In other words, these functions/classes introduce controlled coupling
for convenience's sake.
"""

from django.template import loader
from django.http import HttpResponse, Http404
from django.http import HttpResponseRedirect, HttpResponsePermanentRedirect
from django.db.models.manager import Manager
from django.db.models.query import QuerySet
from django.core import urlresolvers

def render_to_response(*args, **kwargs):
    """
    Returns a HttpResponse whose content is filled with the result of calling
    django.template.loader.render_to_string() with the passed arguments.
    """
    httpresponse_kwargs = {'mimetype': kwargs.pop('mimetype', None)}
    return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)

def redirect(to, *args, **kwargs):
    """
    Returns an HttpResponseRedirect to the apropriate URL for the arguments
    passed.

    The arguments could be:

        * A model: the model's `get_absolute_url()` function will be called.

        * A view name, possibly with arguments: `urlresolvers.reverse()` will
          be used to reverse-resolve the name.

        * A URL, which will be used as-is for the redirect location.

    By default issues a temporary redirect; pass permanent=True to issue a
permanent redirect
    """
    if kwargs.pop('permanent', False):
        redirect_class = HttpResponsePermanentRedirect
    else:
        redirect_class = HttpResponseRedirect

    # If it's a model, use get_absolute_url()
    if hasattr(to, 'get_absolute_url'):
        return redirect_class(to.get_absolute_url())

    # Next try a reverse URL resolution.
    try:
        return redirect_class(urlresolvers.reverse(to, args=args, kwargs=kwargs))
    except urlresolvers.NoReverseMatch:
        # If this is a callable, re-raise.
        if callable(to):
            raise
        # If this doesn't "feel" like a URL, re-raise.
        if '/' not in to and '.' not in to:
            raise

    # Finally, fall back and assume it's a URL
    return redirect_class(to)

def _get_queryset(klass):
    """
    Returns a QuerySet from a Model, Manager, or QuerySet. Created to make
    get_object_or_404 and get_list_or_404 more DRY.
    """
    if isinstance(klass, QuerySet):
        return klass
    elif isinstance(klass, Manager):
        manager = klass
    else:
        manager = klass._default_manager
    return manager.all()

def get_object_or_404(klass, *args, **kwargs):
    """
    Uses get() to return an object, or raises a Http404 exception if the object
    does not exist.

    klass may be a Model, Manager, or QuerySet object. All other passed
    arguments and keyword arguments are used in the get() query.

    Note: Like with get(), an MultipleObjectsReturned will be raised if more     than one
    object is found.
    """
    queryset = _get_queryset(klass)
    try:
        return queryset.get(*args, **kwargs)
    except queryset.model.DoesNotExist:
        raise Http404('No %s matches the given query.' %     queryset.model._meta.object_name)

def get_list_or_404(klass, *args, **kwargs):
    """
    Uses filter() to return a list of objects, or raise a Http404 exception if
    the list is empty.

    klass may be a Model, Manager, or QuerySet object. All other passed
    arguments and keyword arguments are used in the filter() query.
    """
    queryset = _get_queryset(klass)
    obj_list = list(queryset.filter(*args, **kwargs))
    if not obj_list:
        raise Http404('No %s matches the given query.' %     queryset.model._meta.object_name)
    return obj_list

非常感谢

【问题讨论】:

  • render 快捷方式包含在 Django 1.9 中(参见 example in the docs)。您能否发布完整的回溯,它可能会提示正在发生的事情。
  • 不确定如何在使用 django.shortcuts 导入渲染时发布完整的回溯。您是指使用 from django.shortcuts import * 时的回溯吗?
  • 您在此处发布的代码看起来没问题。屏幕截图显示from django.shortcuts import render 位于第 34 行,因此该模块中可能有一些您没有向我们展示的内容。或者,您的 Django 安装可能已经以某种方式损坏。
  • 你是对的,但之前的每一件事都被注释了(带#)这是教程的另一部分,我想保留它,所以我只是评论了它。然而它工作得很好。我想我会选择损坏的 django 安装,但其他所有工作正常。

标签: django


【解决方案1】:

最后我已经使用虚拟盒部署了一个虚拟环境(ubuntu)。 我在 ubuntu env 上完全没有问题来部署它,并使用与上面完全相同的代码按照步骤操作! 无论如何感谢您的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 2022-10-16
    • 2018-07-14
    • 2017-12-25
    相关资源
    最近更新 更多