0

私のviews.pyから、次の例が機能します:

def get_stats_file (request):
    ...
    stats_file = settings.PROJECT_ROOT + "my.stats.txt"
    return HttpResponse (stats_file)

以下は、以下に示すエラーを示します。唯一の違いは、関数内から stats_file 文字列を作成するのではなく、別の関数で作成することです。

def get_absolute_path (filename):
    return settings.PROJECT_ROOT + filename

def get_stats_file (request):
    stats_file = get_absolute_path("my.stats.txt")
    return HttpResponse (stats_file)

エラー:

Request Method: GET
Request URL: http://a.b.c.d:8000/XXX/XXX/XXX/XXX/XXX/

Django Version: 1.4.3
Python Version: 2.7.3
Installed Applications:
('django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin',
 'visualizer')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')

Traceback:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/home/amsaha/XXX/XXX/XXX/XXX/XXX/views.py" in get_port_info
  39.     stats_file = get_absolute_path("my.stats.txt")
File "/usr/local/lib/python2.7/dist-packages/django/views/decorators/cache.py" in _wrapped_view_func
  90.         add_never_cache_headers(response)
File "/usr/local/lib/python2.7/dist-packages/django/utils/cache.py" in add_never_cache_headers
  129.     patch_response_headers(response, cache_timeout=-1)
File "/usr/local/lib/python2.7/dist-packages/django/utils/cache.py" in patch_response_headers
  119.     if not response.has_header('Last-Modified'):

Exception Type: AttributeError at /XXX/XXX/XXX/XXX/XXX
Exception Value: 'str' object has no attribute 'has_header'

私はいくつかの非常に単純な間違いをしているに違いありません:-)

4

1 に答える 1

0

それがすべての関連するコードだと確信していますか?

まず、HttpResponse は、指定されたファイル名を応答に丸呑みする機能を提供しません。あなたが言っているのは、「そのファイル名のファイルの内容ではなく、ファイル名と同じ本文で応答してください」ということです。実際のコンテンツが必要な場合は、HttpResponse(open(filename).read(), content_type="mimetype of the file") を実行する必要があります。

第二に、スタック トレースは、HttpResponse インスタンスではなく、ビューから文字列を返していることを暗示しているようです。これにより、何が起こっているかを確認するのに十分なコードを共有していないと思われます。

于 2013-11-08T07:27:52.323 に答える