GET показывает 304 в Django и тест не проходит, когда записи перечислены - PullRequest
0 голосов
/ 04 сентября 2011

в моем приложении django я использую файл css и некоторые изображения для своих веб-страниц. Я определил media_root и media_url как

в settings.py

MEDIA_ROOT = '/home/me/dev/python/django/myproject/mysite/media/'
MEDIA_URL = '/site_media/myapp/'
ADMIN_MEDIA_PREFIX = '/media/'
TEMPLATE_DIRS = (
'/home/me/dev/python/django/myproject/mysite/myapp/myapptemplates',
)

папка media содержит

myapp/css and myapp/img folders 

полный путь к base.html:

/home/me/dev/python/django/myproject/mysite/myapp/myapptemplates/myapp/base.html

В приведенном выше файле base.html я помещаю css и изображения как

<head>
<title>myapp</title>
<LINK REL=StyleSheet HREF="{{MEDIA_URL}}css/mystyle.css" TYPE="text/css" MEDIA="screen, print"/>
<link rel="shortcut icon" href="{{ MEDIA_URL }}img/my-icon.ico"/>
<div id="header">
    <img class="centerpage" src="{{ MEDIA_URL }}img/mypic.gif" alt="MY WEB APP PIC">
 </div>

Когда я пытаюсь перечислить все записи, которые я создал в своем приложении, все отображается правильно. Но я вижу код ответа 304 для GET на css и изображениях.(Я использую django1.1.1, поэтому я не использовал csrf_token в шаблонах.) Вывод django для терминала равен

[04/Sep/2011 18:15:18] "GET /myapp/entries/ HTTP/1.1" 200 3843
[04/Sep/2011 18:15:18] "GET /site_media/myapp/css/mystyle.css HTTP/1.1" 304 0
[04/Sep/2011 18:15:18] "GET /site_media/myapp/img/mypic.gif HTTP/1.1" 304 0
[04/Sep/2011 18:15:18] "GET /site_media/myapp/img/navigation1.png HTTP/1.1" 304 0

Как вы можете видеть, представление возвращает 200 где GET на cssи изображения возвращаются 304. Однако стиль и изображения правильно отображаются на веб-странице.

Кроме того, при возникновении проблемы, связанной с этим, при тестировании следующего представления происходит сбой.

@login_required
def entries_list(request,template_name,page_title):
    entries=get_entries_of_user(request.user)
    dict={'page_title':page_title ,'entries':entries}
    req_context=RequestContext(request,dict)
    return render_to_response(template,req_context)   

 class BaseTestCase(TestCase):
    def setUp(self):
      super(BaseTestCase,self).setUp()
      self.client.login(username='me',password='me')
 class EntryTest(BaseTestCase):
   fixtures=['entries.json']
   def test_entries_list_view(self):
       print 'reverse=',reverse('myapp_entry_list')
       response=self.client.get(reverse('myapp_entry_list'))
       status_code=response.status_code
       print 'st code=',status_code
       entries=get_context_variable(response,'entries')
       self.assertEqual(200,status_code)

   def get_context_variable(response,name):
      print 'response_context=',response.context
      return response.context[name]

Печать кода состояния здесь дает

st code= 302

Печать response.context печатает 'None', и возникает ошибка типа, когда response.context ['records']

in get_context_variable
    return response.context[name]
TypeError: 'NoneType' object is unsubscriptable

Я не мог понять, почему это происходит. Может кто-нибудь мне помочь?

1 Ответ

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

Вы путаетесь с тем, как MEDIA_URL использует абсолютный путь, определенный MEDIA_ROOT.

Когда вы делаете запрос к '/site_media/myapp/', он будет смотреть на верхний уровень MEDIA_ROOT (в данном случае '/home/me/dev/python/django/myproject/mysite/media/').Если вы запросите /site_media/myapp/css/mystyle.css, он будет искать MEDIA_ROOT / css / mystyle.css, который разрешается в: '/home/me/dev/python/django/myproject/mysite/media/css/mystyle.css'.Вам следует либо изменить MEDIA_URL на /site_meda/, либо изменить MEDIA_ROOT на '/home/me/dev/python/django/myproject/mysite/media/myapp.

Надеюсь, это объяснение прояснило ситуацию для вас.

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