Django-NoReverseMatch初始化表单时,在创建视图中找不到任何参数

问题描述 投票:0回答:1

我正在尝试使用一些作为参数传递的数据来初始化表单。我已经在模型中使用了[[get_absolute_url,但我不认为错误会这样,这是回溯:

Traceback (most recent call last): File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\core\handlers\exception.py", line 34, in inner response = get_response(request) File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\core\handlers\base.py", line 145, in _get_response response = self.process_exception_by_middleware(e, request) File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\core\handlers\base.py", line 143, in _get_response response = response.render() File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\template\response.py", line 105, in render self.content = self.rendered_content File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\template\response.py", line 83, in rendered_content return template.render(context, self._request) File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\template\backends\django.py", line 61, in render return self.template.render(context) File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\template\base.py", line 171, in render return self._render(context) File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\template\base.py", line 163, in _render return self.nodelist.render(context) File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\template\base.py", line 936, in render bit = node.render_annotated(context) File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\template\base.py", line 903, in render_annotated return self.render(context) File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\template\loader_tags.py", line 150, in render return compiled_parent._render(context) File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\template\base.py", line 163, in _render return self.nodelist.render(context) File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\template\base.py", line 936, in render bit = node.render_annotated(context) File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\template\base.py", line 903, in render_annotated return self.render(context) File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\template\loader_tags.py", line 62, in render result = block.nodelist.render(context) File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\template\base.py", line 936, in render bit = node.render_annotated(context) File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\template\base.py", line 903, in render_annotated return self.render(context) File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\template\defaulttags.py", line 443, in render url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app) File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\urls\base.py", line 87, in reverse return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)) File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\urls\resolvers.py", line 677, in _reverse_with_prefix raise NoReverseMatch(msg) Exception Type: NoReverseMatch at /payments/addtoexistingweek/1/2020-W07 Exception Value: Reverse for 'pagoaexistente' with no arguments not found. 1 pattern(s) tried: ['payments/addtoexistingweek/(?P<carro>[0-9]+)/(?P<semana>[-a-zA-Z0-9_]+)$']
这是我获取参数的方式:

<a href={% url 'pagoaexistente' request.resolver_match.kwargs.carro request.resolver_match.kwargs.semana %}><button type="button" class="btn btn-primary" >

urls.py

path('payments/addtoexistingweek/<int:carro>/<slug:semana>', views.AgregarPagoSemana.as_view(), name='pagoaexistente'),

views.py

class AgregarPagoSemana(CreateView): template_name = "AC/add_paymentexistingweek.html" model = Pagos form_class = AgregarPagoTransaccionExistente def get_form_kwargs(self): kwargs = super(AgregarPagoSemana, self).get_form_kwargs() kwargs['carro'] = self.kwargs.get('carro') kwargs['semana'] = self.kwargs.get('semana') return kwargs

forms.py

class AgregarPagoTransaccionExistente(forms.ModelForm): def __init__(self, *args, **kwargs): self.carro = kwargs.pop('carro') self.semana = kwargs.pop('semana') super(AgregarPagoTransaccionExistente, self).__init__(*args, **kwargs) class Meta: model = Pagos fields = ('carro', 'pago', 'fecha', 'semana', 'renta') widgets = {'fecha': forms.DateInput(attrs={'type': 'date'}), 'semana': forms.DateInput(attrs={'type': 'week'}) }

如果没有发送参数,我不明白为什么会看到:

NoReverseMatch at /payments/addtoexistingweek/1/2020-W07

我在那里看到两个参数
django django-forms django-urls django-errors
1个回答
0
投票
<a href={% url 'pagoaexistente' request.resolver_match.kwargs.carro request.resolver_match.kwargs.semana %}><button type="button" class="btn btn-primary" >
此网址应包含关键字参数而不是位置参数。所以你可以做:

<a href={% url 'pagoaexistente' carro=request.resolver_match.kwargs.carro semana=request.resolver_match.kwargs.semana %}>

但是那真的很丑。我建议做的是从视图中暴露模板上下文中的carrosemana。这样可以避免request.resolver_match.kwargs烦人。

class AgregarPagoSemana(CreateView): ... def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context.update({ 'semana': self.kwargs['semana'], 'carro': self.kwargs['carro'], }) return context

然后您的模板可以使用:

<a href={% url 'pagoaexistente' carro=carro semana=semana %}>

如果要避免在视图上使用该额外方法,可以使用始终通过以下方式包含在上下文中的视图实例:

<a href={% url 'pagoaexistente' carro=view.kwargs.carro semana=view.kwargs.semana %}>

© www.soinside.com 2019 - 2024. All rights reserved.