问题描述
在渲染 Django 模板期间,我基于 pytest 的测试失败。
我想看到两件事:模板的名称,以及导致此异常的部分的片段。
也许我瞎了,但我看不到:
tests/magic/test_render_search.py:8 (test_render_foo_search_results)
@pytest.mark.django_db
def test_render_foo_search_results():
portal = PortalFactory.create()
foo = fooFactory.create(name='dummy')
foo_index.sync_foo(foo.id)
foo_index.commit()
> html = render_foo_search_results('name=dummy',portal=portal)
test_render_search.py:16:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../../magic/templatetags/render_search.py:17: in render_foo_search_results
return get_foo_search_results_context(
../../magic/render_util.py:62: in get_foo_search_results_context
html_data = cached_foo_render(search_results,../../magic/render_util.py:41: in cached_foo_render
rendered = render_to_string(template,{
../../../.pyenv/versions/venv3.9.2/lib/python3.9/site-packages/django/template/loader.py:62: in render_to_string
return template.render(context,request)
../../../.pyenv/versions/venv3.9.2/lib/python3.9/site-packages/django/template/backends/django.py:61: in render
return self.template.render(context)
../../../.pyenv/versions/venv3.9.2/lib/python3.9/site-packages/django/template/base.py:171: in render
return self._render(context)
../../../.pyenv/versions/venv3.9.2/lib/python3.9/site-packages/django/test/utils.py:96: in instrumented_test_render
return self.nodelist.render(context)
../../../.pyenv/versions/venv3.9.2/lib/python3.9/site-packages/django/template/base.py:937: in render
bit = node.render_annotated(context)
../../../.pyenv/versions/venv3.9.2/lib/python3.9/site-packages/django/template/base.py:904: in render_annotated
return self.render(context)
../../../.pyenv/versions/venv3.9.2/lib/python3.9/site-packages/django/template/defaulttags.py:443: in render
url = reverse(view_name,args=args,kwargs=kwargs,current_app=current_app)
../../../.pyenv/versions/venv3.9.2/lib/python3.9/site-packages/django/urls/base.py:90: in reverse
return iri_to_uri(resolver._reverse_with_prefix(view,prefix,*args,**kwargs))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <URLResolver 'mycomp.urls' (None:None) '^/'>
lookup_view = 'hydra.foo_detail',_prefix = '/'
args = ('','dummy-tecklenburg---26'),kwargs = {}
possibilities = [([('foo/%(bar_nick)s/%(slug)s/',['bar_nick','slug']),('foo/%(bar_nick)s/%(slug)s-%(variant_version)s/'... 'slug','variant_version'])],'foo/(?P<bar_nick>[^/]+)/(?P<slug>[^/]+?)(?:-(?P<variant_version>\\w))?/$',{},{})]
possibility = [('foo/%(bar_nick)s/%(slug)s/',('foo/%(bar_nick)s/%(slug)s-%(variant_version)s/','slug','variant_version'])]
pattern = 'foo/(?P<bar_nick>[^/]+)/(?P<slug>[^/]+?)(?:-(?P<variant_version>\\w))?/$'
defaults = {},converters = {}
result = 'foo/%(bar_nick)s/%(slug)s-%(variant_version)s/'
params = ['bar_nick','variant_version']
candidate_subs = {'bar_nick': '','slug': 'dummy-tecklenburg---26'}
text_candidate_subs = {'bar_nick': '','slug': 'dummy-tecklenburg---26'}
k = 'slug'
def _reverse_with_prefix(self,lookup_view,_prefix,**kwargs):
if args and kwargs:
raise ValueError("Don't mix *args and **kwargs in call to reverse()!")
if not self._populated:
self._populate()
possibilities = self.reverse_dict.getlist(lookup_view)
for possibility,pattern,defaults,converters in possibilities:
for result,params in possibility:
if args:
if len(args) != len(params):
continue
candidate_subs = dict(zip(params,args))
else:
if set(kwargs).symmetric_difference(params).difference(defaults):
continue
if any(kwargs.get(k,v) != v for k,v in defaults.items()):
continue
candidate_subs = kwargs
# Convert the candidate subs to text using Converter.to_url().
text_candidate_subs = {}
for k,v in candidate_subs.items():
if k in converters:
text_candidate_subs[k] = converters[k].to_url(v)
else:
text_candidate_subs[k] = str(v)
# Wsgi provides decoded URLs,without %xx escapes,and the URL
# resolver operates on such URLs. First substitute arguments
# without quoting to build a decoded URL and look for a match.
# Then,if we have a match,redo the substitution with quoted
# arguments in order to return a properly encoded URL.
candidate_pat = _prefix.replace('%','%%') + result
if re.search('^%s%s' % (re.escape(_prefix),pattern),candidate_pat % text_candidate_subs):
# safe characters from `pchar` deFinition of RFC 3986
url = quote(candidate_pat % text_candidate_subs,safe=RFC3986_SUBDELims + '/~:@')
# Don't allow construction of scheme relative urls.
return escape_leading_slashes(url)
# lookup_view can be URL name or callable,but callables are not
# friendly in error messages.
m = getattr(lookup_view,'__module__',None)
n = getattr(lookup_view,'__name__',None)
if m is not None and n is not None:
lookup_view_s = "%s.%s" % (m,n)
else:
lookup_view_s = lookup_view
patterns = [pattern for (_,_,_) in possibilities]
if patterns:
if args:
arg_msg = "arguments '%s'" % (args,)
elif kwargs:
arg_msg = "keyword arguments '%s'" % (kwargs,)
else:
arg_msg = "no arguments"
msg = (
"Reverse for '%s' with %s not found. %d pattern(s) tried: %s" %
(lookup_view_s,arg_msg,len(patterns),patterns)
)
else:
msg = (
"Reverse for '%(view)s' not found. '%(view)s' is not "
"a valid view function or pattern name." % {'view': lookup_view_s}
)
> raise noreverseMatch(msg)
E django.urls.exceptions.noreverseMatch: Reverse for 'hydra.foo_detail' with arguments '('','dummy-tecklenburg---26')' not found. 1 pattern(s) tried: ['foo/(?P<bar_nick>[^/]+)/(?P<slug>[^/]+?)(?:-(?P<variant_version>\\w))?/$']
../../../.pyenv/versions/venv3.9.2/lib/python3.9/site-packages/django/urls/resolvers.py:673: noreverseMatch
有没有办法让 pytest 向我显示模板名称和模板中导致此异常的行?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)