Поймано NoReverseMatch при рендеринге: обратное для "account_profile_view" с аргументами "('',)" и ключевыми словами "{}" не найдено - PullRequest
3 голосов
/ 09 февраля 2012

Как вы можете заметить, у меня возникла странная ошибка, пойманная NoReverseMatch при рендеринге: обратное для 'accounts_profile_view' с аргументами '(' ',)' и ключевыми словами аргументы '{}' не найдены.

Самое странное, что когда в django используется shell_plus, импортируется профиль пользователя, затем импортируется функция реверса из django.urlcore.resolvers, я делаю это:

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

и все работает просто отлично!

Я создал для вас, ребята, кучу суть, чтобы помочь мне просмотреть их, вот они.

Это модель https://gist.github.com/140127f6303660baf8d9

Это мой файл просмотров https://gist.github.com/1a3b9651eef3fb9d22db

Это мои модели URL https://gist.github.com/66fe6b1f068739f940db

и это весь URL проекта https://gist.github.com/edea781b1efca341230b

и конечно же ошибка https://gist.github.com/8b84bd0394d4b047dce8

Спасибо за помощь, сообщество!

====== ОБНОВЛЕНИЕ ======

Я кое-что выяснил, что-то странное происходит с представлением и шаблоном contact_us, когда я перехожу на страницу contact-us, а request.user.username в заголовке показывает пустую переменную.

Вот мой адрес contact_us, который является частью основных представлений проекта:

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-уни-форму

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

Информация шаблона вообще не отображается!

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

Ошибка показывает, что не так: аргумент username оценивается как пустая строка.Вам нужно понять, почему это так.

0 голосов
/ 09 февраля 2012
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+) не совпадают с данными в обратном def: reverse ('accounts_profile_views', args = [username])

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

Отладьте представление и посмотрите, что в этом имени пользователя, если оно содержит пробел, или точку, или пустую строку, как говорит наш PyMASTER @Daniel Roseman ... это не будет соответствовать и вызовет это исключение.

...