Представление Django вызывается, когда я этого не хочу - почему?

Я работаю над заданием по сетевой веб-разработке cs50. По сути, это голая копия twitter. У меня возникла проблема, когда представление из views.py вызывается, когда я не хотел, чтобы оно вызывалось. Я знаю, что ниже я выкладываю больше, чем нужно, своего кода, но я чувствую, что мне это необходимо, поскольку я не знаю, где находится проблемная область.

Функция views.py follow_count() вызывается в конечном итоге, когда я вызываю представление index, но не могу определить почему. Т.е. она вызывается каждый раз, когда загружается домашняя страница. Я не хочу, чтобы она вызывалась до тех пор, пока ее специально не вызовет слушатель события clicked в js-файле. Я не могу понять, что заставляет функцию follow_count() запускаться раньше времени, каждый раз, когда я загружаю представление index. Когда я прослеживаю путь различных функций, вызывающих друг друга, кажется, что ничто не вызывает follow_count(), но она все равно запускается.

views.py:

urls.py:

from django.urls import path

from . import views

urlpatterns = [
    path("", views.index, name="index"),
    path("login", views.login_view, name="login"),
    path("logout", views.logout_view, name="logout"),
    path("register", views.register, name="register"),
    path("all_posts", views.all_posts, name="all_posts"),
    path("<str:username_lookup>", views.follow_count, name="follow_count"),
    path("<str:username_lookup>/follow", views.follow, name="follow"),
    path("<str:username_lookup>/unfollow", views.unfollow, name="unfollow"),
    path("<str:username_lookup>/follow_button", views.follow_button, name="follow_button"),
    path("profile_info", views.follow_button, name="profile_info")
]

index.html

{% extends "network/layout.html" %}
{% load static %}

{% block body %}
    {% if user.is_authenticated %}

        <div id="index-display"> 
            <h3>All Posts</h3>
            <br>
            <div id="new-post">
                <h5>New Post</h5>
                <form action="{% url 'index' %}" method="post">
                    {% csrf_token %}
                    <textarea class="form-control" name="post-body" placeholder="Type post here"></textarea>
                    <input id="post-message" type="submit" class="btn btn-primary"/>
                </form>
            </div>
            <div id="all-posts">
            </div>
        </div>

        <div id="profile-display">
            <h3 id="profile-name"></h3>
            <br>
            <b>Followers: </b><b id="followers"></b>
            <b>Following: </b><b id="following"></b>
            <div id="profile-posts">
            </div>
        </div>

        <div id="following-display">
            <h3>Following</h3>
            <br>
            <div id="following-posts">
            </div>
        </div>


    {% else %}
        <strong> Login To See Posts</strong>
    {% endif %}

{% endblock %}

{% block script %}
    <script src="{% static 'network/index.js' %}"></script>
{% endblock %}

index.js:

Вам нужно поставить profile_info перед <str:username>, иначе это будет первое совпадение, и таким образом сработает кнопка follow_countinstead of thefollow_button`:

urlpatterns = [
    path('', views.index, name='index'),
    path('login', views.login_view, name='login'),
    path('logout', views.logout_view, name='logout'),
    path('register', views.register, name='register'),
    path('all_posts', views.all_posts, name='all_posts'),
    #    ↓ first profile_info before <str:username_lookup>
    path('profile_info', views.follow_button, name='profile_info'),
    path('<str:username_lookup>', views.follow_count, name='follow_count'),
    path('<str:username_lookup>/follow', views.follow, name='follow'),
    path('<str:username_lookup>/unfollow', views.unfollow, name='unfollow'),
    path('<str:username_lookup>/follow_button', views.follow_button, name='follow_button'),
]
Вернуться на верх