код шаблона не работает в другом шаблоне приложения

#django #django-models #django-views #django-templates #django-urls

#django #django-модели #django-просмотры #django-шаблоны #django-urls

Вопрос:

Я пытаюсь изучить Django, я уверен, что мой вопрос глуп, но я думаю, что каждый новичок должен пройти этот путь к успеху, конечно, с помощью профессионалов.

Кроме того, у меня есть сайт с 2 приложениями, профилями и сообщениями в этом проекте, я могу видеть, за кем я следую в списке в шаблоне (posts/main.html ) проблема в том, что мне нужен тот же список и в другом шаблоне (profiles/main.html ).

Я сделал копию фрагмента кода, но это не сработало. Я действительно не знаю, как это лучше объяснить, или я не знаю, как я могу точно его найти. Я попробовал это: 1.) Как использовать представления в разных шаблонах приложений 2.) Как импортировать представления из других приложений views 3.) и многое другое, я прочитал все материалы, но не смог найти то, что ищу

Большое спасибо за вашу помощь.

ПУБЛИКУЕТ ПРИЛОЖЕНИЕ

posts/models.py

 class Post(models.Model):
    ...
    author = models.ForeignKey(Profile, on_delete=models.CASCADE)
    text = models.TextField(default='no text...')
    ...
    def __str__(self):
        return str(self.text)[:30]
  

posts/urls.py

 from django.urls import path
from .views import posts_of_following_profiles, index, contact, about, category, PostListView, PostDetailView, post, detay
from profiles.views import ProfileListView
app_name="posts"

urlpatterns = [
    ...
    path('following/', ProfileListView.as_view(), name='posts-follow-view'),
    ...
    ]
  

posts/views.py

 def posts_of_following_profiles(request):
    
    # get logged in user profile
    profile = Profile.objects.get(user=request.user)

    # check who we are following
    users = [user for user in profile.following.all()]

    # initial values for variables
    posts = []
    qs = None

    # get the posts of people who we are following
    for u in users:
        p = Profile.objects.get(user=u)
        p_posts = p.post_set.all()
        posts.append(p_posts)
    
    # our posts
    my_posts = profile.profile_posts()
    posts.append(my_posts)

    # sort and chain qs and unpack the post list
    if len(posts)>0:
        qs = sorted(chain(*posts), reverse=True, key=lambda obj: obj.ilan_tarihi)


    return render(request, 'posts/main.html', {'profile':profile, 'posts':qs})
  

posts/main.html

ЭТА ЧАСТЬ РАБОТАЕТ ХОРОШО

 <h3>list of followings</h3>
{% for p in profiles.following.all %}
<br>{{p}} <br>
{% endfor %}
  

ПРОФИЛИ ПРИЛОЖЕНИЙ

profiles/models.py

 class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    following = models.ManyToManyField(User, related_name='following', blank=True)
    text = models.TextField(default='no text...')
    
    def profile_posts(self):
        return self.post_set.all()

    def __str__(self):
        return str(self.user.username)  
  

profiles/urls.py

 from django.urls import path
from .views import ProfileListView, ProfileDetailView, follow_unfollow_profile
from posts.views import posts_of_following_profiles

app_name = 'profiles'

urlpatterns = [
    path('switch_follow/', follow_unfollow_profile, name='follow-unfollow-view'),
    path('portfolio/', posts_of_following_profiles, name='profile-list-view'),
    path('<pk>/', ProfileDetailView.as_view(), name='profile-detail-view'),
]
  

profiles/views.py

 def follow_unfollow_profile(request):
    if request.method=="POST":
        my_profile = Profile.objects.get(user=request.user)
        #profile_pk is the name of the input in detail.html
        pk = request.POST.get('profile_pk')
        obj = Profile.objects.get(pk=pk)

        if obj.user in my_profile.following.all():
            my_profile.following.remove(obj.user)
        else:
            my_profile.following.add(obj.user)
        return redirect(request.META.get('HTTP_REFERER'))
    return redirect('profiles:profile-list-view') 
  

profiles/main.html

ВОТ ЧЕГО Я ХОЧУ, ЭТОТ КОД НЕ БУДЕТ РАБОТАТЬ (это тот же код, что и в posts/main.html )

 <h3>list of followings</h3>
{% for p in profiles.following.all %}
<br>{{p}} <br>
{% endfor %} 

 
  

Ответ №1:

В profiles/urls.py , даже если вы импортировали follow_unfollow_profile(просмотр). Попробуйте приведенный ниже код:

путь (‘switch_follow/’, views.follow_unfollow_profile, name=’follow-unfollow-profile’),

Во многом именно по этой причине django может задать путь, но не может следовать инструкциям, упомянутым в views.py досье.

Также убедитесь, что,

‘КАТАЛОГИ’: [TEMPLATE_DIR,],

включен в корневой каталог settings.py файл, в разделе ШАБЛОНЫ.

Комментарии:

1. мой settings.py : ‘КАТАЛОГИ’: [os.path.join(BASE_DIR, ‘шаблоны’)], urls.py после редактирования: из django.urls импортировать путь из .views импортировать ProfileListView, ProfileDetailView, follow_unfollow_profile из . импорт просмотров из posts.views импорт posts_of_following_profiles app_name = ‘profiles’ urlpatterns = [ путь (‘switch_follow/’, views.follow_unfollow_profile, name=’follow-unfollow-profile’), путь (‘портфолио /’, posts_of_following_profiles, name=’профиль-список-просмотр’), путь (‘<pk>/’, ProfileDetailView.as_view(), name=’profile-detail-view’), ] Но ничего не изменилось