- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试测试用户提供的 extra_context 是否被正确处理在 View 中。
这是我的测试方法:
# tests.py (of course it's a part of TestCase class)
def test_should_use_definied_extra_context(self):
response = self.client.get(reverse('contact_question_create'), {
'extra_context': {'foo': 'bar', 'callable': lambda: 'called'}
})
eq_(response.context['foo'], 'bar')
eq_(response.context['callable'], 'called')
这是我的 View 函数:
# views.py (my view function)
def contact_question_create(request, success_url=None, form_class=None,
template_name="contact/contact_form.html",
extra_context=None, **kwargs):
if form_class is None:
form_class = forms.DefaultContactForm
if request.method == 'POST':
form = form_class(data=request.POST, files=request.FILES)
if form.is_valid():
signals.question_posted.send(sender='contact_question_create_view',
form_data=form.cleaned_data)
if success_url is None:
pass # TODO: implement this case
else:
return redirect(sucess_url)
else:
form = form_class()
if extra_context is None:
extra_context = {}
context = RequestContext(request)
for key, value in extra_context.items():
context[key] = callable(value) and value() or value
return render_to_response(template_name,
{'form':form},
context_instance=context)
运行测试时,出现以下 KeyError 异常:
======================================================================
ERROR: test_should_use_definied_extra_context (mpozyczka.apps.contact.tests.ContactViewShouldUseRequestedValues)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/unittest.py",
line 279, in run testMethod()
File "/Users/bx2/Dropbox/Projekty/mpozyczka/src/mpozyczka/apps/contact/tests.py",
line 56, in test_should_use_definied_extra_context
eq_(response.context['foo'], 'bar')
File "/Users/bx2/Dropbox/Projekty/mpozyczka/parts/django/django/test/utils.py",
line 35, in __getitem__ raise KeyError(key)
KeyError: 'foo'
我觉得我太累了,我没有看到问题 - 关于我错过了什么的任何线索?
最佳答案
您需要使用以下解决方案:
def contact_question_create(request, success_url=None, form_class=None,
template_name="contact/contact_form.html",
extra_context=None, **kwargs):
# your view code here
context = {'defult':'foo'}
if extra_context:
context.update(extra_context)
return render_to_response(template_name,
context,
context_instance=RequestContext(request, context))
测试它时,您需要在 url.py 或调用您的 View 的 View 中传递 extra_context
。
def my_view(reuest):
return contact_question_create(extra_context={'foo':'bar'})
关于python - 在 Django 中测试 extra_context,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3817199/
我做了一个自定义的 loginView,但在我的模板中无法访问 extra_context 字典。 (认证工作正常) 我的 View 文件: from django.contrib.auth impo
遵循 Django 教程后,我的应用程序的基线已启动并运行,但现在我尝试向其中一个模板添加一些数据。我以为我可以通过使用 extra_context 添加它,但我遗漏了一些东西(可能很明显,因为我是
我正在尝试测试用户提供的 extra_context 是否被正确处理在 View 中。 这是我的测试方法: # tests.py (of course it's a part of TestCase
我刚刚改用 django-registration 来管理我网站上的用户身份验证。之前,我为注册和登录页面使用了 View ,因此能够指定上下文参数。但是现在,我不再有这些页面的 View ,因为 d
编辑: FWIW,我正在运行 django 1.3 我有... class CreateProductWizard(FormWizard): def get_template(self, st
在 django/contrib/auth/views.py有注销 View 的定义: def logout(request, next_page=None, template_name
我目前正在使用 Django v1.11。我想要发生的是,如果经过身份验证的用户访问登录页面,他们将被重定向。在我的例子中,即使他们已经通过身份验证,他们现在也可以访问登录页面。 我之前的 extra
使用 change_view 我可以毫无问题地将上下文发送到 change_form.html,但是当我尝试在 submit_line.html< 中使用 {{ show_save_as_draft
因此 Django 1.5 不再使用 direct_to_template 调用。 我正在移植一些 url,但我被这个阻止了。 url(r'^system_settings/$', 'djan
我是一名优秀的程序员,十分优秀!