Представление 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 the
follow_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'),
]