Соответствие регулярному выражению в urls.py для представления приложения django - PullRequest
0 голосов
/ 05 октября 2011

URL-адрес, который я пытаюсь найти:

http://domain/games/getdata/genres/

Этот запрос сделан через ajax для получения некоторых данных JSON из внешнего API. Я не могу заставить это сделать совпадение; продолжает работать с обработчиком промежуточного программного обеспечения, который я настроил. Я уверен, что это исправление довольно очевидно, но я слишком долго смотрел на это.

urls.py:

from django.conf import settings
from django.conf.urls.defaults import patterns, include
from django.contrib import admin


admin.autodiscover()

urlpatterns = patterns('',

    (r'^$', 'blog.views.index'),
    (r'^games/$', 'giantbomb_games.views.index'),
    (r'^games/getdata/(?P<resource>\w+)/$', 'giantbomb_games.views.getdata'),

    (r'^grappelli/', include('grappelli.urls')),
    (r'^admin/filebrowser/', include('filebrowser.urls')),
    (r'^admin/', include(admin.site.urls)),
)

views.py:

def getdata(request, resource):

    url = '%s/%s/?api_key=%s&format=%s' % (api_url, resource , api_key, request_format)
    print url
    r = requests.get(url)

    return r.content

страница / middleware.py:

from django.http import Http404
from django.conf import settings

from page.views import site_page

class SitePageFallbackMiddleware(object):
    def process_response(self, request, response):
        if response.status_code != 404:
            return response # No need to check for a flatpage for non-404 responses.
        try:
            return site_page(request, request.path_info)
        # Return the original response if any errors happened. Because this
        # is a middleware, we can't assume the errors will be caught elsewhere.
        except Http404:
            return response
        except:
            if settings.DEBUG:
                raise
            return response

Ошибка Django:

Traceback (most recent call last):

  File "/var/www/html/top10/top10/../ext/django/core/servers/basehttp.py", line 280, in run
    self.result = application(self.environ, self.start_response)

  File "/var/www/html/top10/top10/../ext/django/core/servers/basehttp.py", line 674, in __call__
    return self.application(environ, start_response)

  File "/var/www/html/top10/top10/../ext/django/core/handlers/wsgi.py", line 245, in __call__
    response = middleware_method(request, response)

  File "/var/www/html/top10/top10/page/middleware.py", line 8, in process_response
    if response.status_code != 404:

AttributeError: 'str' object has no attribute 'status_code'

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 05 октября 2011

getdata представление возвращает строку в качестве ответа вместо объекта HttpResponse, поэтому process_response в промежуточном программном обеспечении получает строку, а строка не имеет status_code метода.Измените ваш взгляд на:

def getdata(request, resource):
    #...
    return HttpResponse(r.content, mimetype="text/plain")
1 голос
/ 05 октября 2011

Я не уверен, что правильно вас понял ... Вы говорите, что ваш взгляд не получил ответа?

Если вы настроили некоторые классы промежуточного программного обеспечения, то нормально, что поток, обрабатывающий запрос, проходит через промежуточное программное обеспечение до (и после), он попадает в поле вашего зрения.

Вот некоторая документация:

https://docs.djangoproject.com/en/dev/topics/http/middleware/?from=olddocs

Внутри вашего промежуточного класса вы сможете увидеть, какая функция вида будет вызываться распознавателем URL-адресов, когда она попадет в метод: process_view (self, request, view_func, view_args, view_kwargs)

Пожалуйста, дайте мне знать, если я не совсем понял ваш вопрос.

0 голосов
/ 05 октября 2011

Разобрался. Джанго на самом деле правильно смотрел в поле зрения. API выдает ошибку из-за неверно сформированного URL-запроса, сделанного в представлении getdata. Довольно глуп с моей стороны.

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