Ошибка Django NoReverseMatch при развертывании - PullRequest
0 голосов
/ 12 марта 2019

Я использую пакет Django-Friendship для отношений с последователями.В localhost он прекрасно работает, но при развертывании выдает ошибку как

Reverse for 'follower_add_new' with arguments '('Bora.gulerrr',)' not found. 1 pattern(s) tried:
['tr/friendship/follower/add/(?P<followee_username>\\w+)/$']

. Я не знаю, почему он выдает ошибку при развертывании.

views.py

@login_required
    def follower_add(request, followee_username, template_name='friendship/follow/add.html'):



        """ views.py """
        #ctx = {'followee_username': followee_username}

        if request.method == 'POST':
            followee = user_model.objects.get(username=followee_username)
            follower = request.user
            try:
                Follow.objects.add_follower(follower, followee)
            except AlreadyExistsError as e:
                ctx['errors'] = ["%s" % e]
            else:
                return redirect('followees')

        return render(request, template_name, ctx)
    `

urls.py

urlpatterns = [
       re_path(r'^follower/add/(?P<followee_username>\w+)/$',follower_add,name = "follower_add_new"),
       re_path(r'^follower/remove/(?P<followee_username>\w+)/$',follower_remove,name = "follower_remove_new"),

    ]

home.html

<div class="col">
        <h4>{%trans "People and Companies" %}</h4><br><br>
        <h5>{%trans "Filter" %}</h5>
        <form method="get">
            {{ filter.form| crispy }}
            <button type="submit">{%trans "Search" %}</button><br><br>
        </form>

        {% for user in filter.qs %}
            {% if not user in blocking %}
                {% if not user in blockers %}        

                    {% if not user in followees  %} 

                            <table class="table">
                                <tbody id="myTable">                            
                                <tr>
                                    <th scope="row"><a href="{% url 'user:view_profile_with_pk' pk=user.pk %}">
                                        {% if user.accounts.image %}
                                        <img src="{{user.accounts.image.url}}" width="50" alt="Profile Photo">&nbsp;&nbsp;&nbsp;&nbsp;
                                        {% else %} No Photo &nbsp;&nbsp;&nbsp;&nbsp; {% endif %}
                                        {% if user.first_name %}
                                        {{ user.first_name }}&nbsp;&nbsp;{{ user.last_name }}{% else %}{{ user.username }}{% endif %}&nbsp;&nbsp;&nbsp;&nbsp;{% if not user in followees %}
                                        <a href="{% url 'follower_add_new' user.username %}">follow</a>{% else %}
                                        <a href="{% url 'follower_remove_new' user.username %}">unfollow</a>{% endif %}
                                        | <a href="{% url 'block_add' user.username %}">block</a> </th>                     
                                </tr>                           
                                </tbody> 

                    {% endif %}
                {% endif %}

            {% else %}

            {% endif %}
        {% endfor %}
        </ul>


    </div>

1 Ответ

1 голос
/ 12 марта 2019

Вы используете \w+ для имени пользователя. Это допускает прописные буквы A-Z, строчные буквы a-z, цифры 0-9 и подчеркивание. Однако он не позволяет ., поэтому URL для Bora.gulerrr не будет совпадать.

Вы можете решить эту проблему, ограничив имена пользователей до совпадения \w+, создав поле slug для модели пользователя, которая соответствует \w+, или приняв больше символов, например:

re_path(r'^follower/add/(?P<followee_username>[\w\.-]+)/$',follower_add,name = "follower_add_new"),
re_path(r'^follower/remove/(?P<followee_username>[\w\.-]+)/$',follower_remove,name = "follower_remove_new"),
...