【问题标题】:Caught NoReverseMatch while rendering: Reverse for 'accounts_profile_view' with arguments '('',)' and keyword arguments '{}' not found渲染时捕获 NoReverseMatch:“accounts_profile_view”的反向参数“(”,)”和关键字参数“{}”未找到
【发布时间】:2012-03-02 00:45:01
【问题描述】:

正如你在标题中看到的,我在渲染时遇到了一个奇怪的 Caught NoReverseMatch:Reverse for 'accounts_profile_view' with arguments '('',)' and keyword arguments '{}' not found.

最奇怪的是在 django 中使用 shell_plus,导入用户配置文件,然后从 django.urlcore.resolvers 导入反向函数我这样做:

reverse('accounts_profile_views', args=[username])

而且效果很好!

我为你们创建了一堆要点来帮助我审查它们,在这里。

这是模型 https://gist.github.com/140127f6303660baf8d9

这是我的视图文件 https://gist.github.com/1a3b9651eef3fb9d22db

这是我的模特网址 https://gist.github.com/66fe6b1f068739f940db

这是整个项目的网址 https://gist.github.com/edea781b1efca341230b

当然还有错误 https://gist.github.com/8b84bd0394d4b047dce8

感谢您的帮助社区!

====== 更新 ======

我发现了一些东西,在contact_us 视图和模板上发生了一些奇怪的事情,当我转到contact-us 页面时,标题上的request.user.username 显示一个空变量。

这是我的contact_us url,它是项目主要视图的一部分:

from django.conf.urls.defaults import * 
from django.views.generic.simple import direct_to_template

urlpatterns = patterns('apps.maincoke.views',
    url(r'^(?i)$', 'home', name='home'),
    url(r'^(?i)faqs/$', direct_to_template, {'template': 'maincoke/faqs.html'}, name="main_faqs"),
    url(r'^(?i)contact-us/$','contact_us', name='contact_us'),
)

这是contact_us 视图:

@login_required
@render_to("maincoke/contact_us.html")
def contact_us(request):
    mail_status = None

    if request.method == 'POST':
        contact_us_form = ContactUsForm(request, request.POST)
        if contact_us_form.is_valid():
            mail_status = contact_us_form.send_as_mail()
            if mail_status:
                 contact_us_form = ContactUsForm(request)
    else:
        contact_us_form = ContactUsForm(request)
    return { 'contact_us_form' : contact_us_form, 'mail_status' : mail_status }

这是表单,我使用 django-uni-form

class ContactUsForm(forms.Form):
    name = forms.CharField(label='Nombre', max_length=120, required=True)
    email = forms.CharField(max_length=200, required=True)
    message = forms.CharField(label='Mensaje', widget=forms.Textarea(attrs={'cols':'40'}), 
    required=True)

    MAX_MESSAGE_LENGTH = 2000
    # uniForm Helper
    helper = FormHelper()
    helper.form_id = "contact_us_form"
    layout = Layout(
        Fieldset('',
            'name', 'email', 'message'
        )
    )
    helper.add_layout(layout)

    # Submit button(s)
    submit = Submit('submit','Enviar')
    helper.add_input(submit)


    class Meta:
        fields = ['name', 'email', 'message']

    def __init__(self, request, *args, **kw):
        super(ContactUsForm, self).__init__(*args, **kw)
        self.request = request

    def clean_message(self):
        message_data = self.cleaned_data['message']
        if len(message_data) > self.MAX_MESSAGE_LENGTH:
            raise forms.ValidationError("Mensaje demasiado largo")

    def send_as_mail(self):
        data = self.cleaned_data
        send_status=True
        mail_content_html = render_to_string('mails/contactmail.html', {'data':data})
        mail_content_text = strip_tags(mail_content_html)
        mail = EmailMultiAlternatives("Mensaje enviado de %s" % data['name'], 
                                 mail_content_text, 
                                 settings.DEFAULT_FROM_EMAIL, 
                                 settings.CONTACT_MAIL_RECIPIENT
                                )
        mail.attach_alternative(mail_content_html, "text/html")
        try:
             mail.send(fail_silently=False)
        except:
             send_status=False

        return send_status

模板的信息根本没有被渲染!

【问题讨论】:

    标签: django django-templates django-views django-urls


    【解决方案1】:

    该错误向您显示出了什么问题:username 参数的计算结果为空字符串。您需要弄清楚这是为什么。

    【讨论】:

      【解决方案2】:
      from django.conf.urls.defaults import *
      
      urlpatterns = patterns('apps.accounts.views',
      url(r'^(?P<username>\w+)/$', 'profile_view', {}, name="accounts_profile_view"),
      url(r'^(?P<username>\w+)/edit/$', 'profile_edit', {}, name="accounts_profile_edit"),
      )
      

      当此处表示的数据:r'^(?P username \w+) 与反向定义中的给定数据不匹配时会发生这种情况:reverse('accounts_profile_views', args=[username])

      \w  Match a word character (alphanumeric plus "_")
      

      调试视图并查看此用户名中的内容,如果它包含空格、点或空字符串,正如我们的 PyMASTER @Daniel Roseman 所说...这将不匹配并引发此异常。

      【讨论】:

        猜你喜欢
        • 2011-10-01
        • 2011-08-04
        • 2013-12-22
        • 2013-07-25
        • 1970-01-01
        • 2016-11-11
        • 2018-09-08
        • 1970-01-01
        • 2019-07-21
        相关资源
        最近更新 更多