Как я могу интегрировать функциональное представление в классовое представление? - PullRequest
0 голосов
/ 10 октября 2019

На моем сайте есть 2 раздела для пользователей. Страница сообщений пользователя и страница профиля. На странице профиля есть вся их информация: имя пользователя, описание, имя / фамилия и т. Д. На странице сообщений пользователя есть все свои сообщения. Тем не менее, я хочу как-то объединить их.

Вот часть кода.

Вот представление для сообщений пользователя

class UserPostListView(ListView):
    model = Post
    template_name = 'mainapp/user_posts.html'
    context_object_name = 'posts'

    def get_queryset(self):
        user = get_object_or_404(User,username=self.kwargs.get('username'))
        return Post.objects.filter(author=user).order_by('-published_date')

Как вы можете видетьЯ возвращаю сообщения определенных пользователей.

А теперь вот мой профиль

def view_profile(request,pk=None):
        if pk:
            user_profile = User.objects.get(pk=pk)
        else:
            user_profile = request.user
        context = {'user':user_profile}
        return render(request,'mainapp/profile.html',context)

Возвращает всю информацию пользователя.

Вот код HTML длястраница профиля и сообщений пользователя

{% block content %}


<div class="profile-page-container">

    <div class="profile-page-info">
<div class="profile-page-banner">
    <div class="profile-page-banner-background">
        <!-- <img src="https://cdn.pixabay.com/photo/2017/08/30/01/05/milky-way-2695569_960_720.jpg" alt="{{ user }}'s Background Image" > -->
    </div>
    <div class="profile-page-banner-text">
<h2 title="{{ user }}" id="username-profile-page">{{ user|safe|linebreaksbr|truncatechars_html:25 }} {% if user.userprofileinfo.verified %} <span class="image-profile-verified"><img draggable="false" title="Verified User" class="verifed" src="{% static 'images\verified.png' %}" alt="verified" width="25" height="25" srcset=""></span> {% endif %}</h2>

<p>{{ user.first_name }} {{ user.last_name }}</p><br>
</div>
</div>
<div class="profile-page-user-desc-box">
<p>{{ user.userprofileinfo.description }}</p>
<a href="{{ user.userprofileinfo.website }}"><p>{{ user.userprofileinfo.website }}</p></a>
<p>{{ user.userprofileinfo.joined_date |date:"F d Y" }}</p>
</div>
<br>
{% if user.userprofileinfo.image %}
<img class="rounded-circle account-img" src="{{ user.userprofileinfo.image.url }}" alt="{{ user }}'s Profile Picture'">
{% endif %}
</div>
<div class="user-post-user-profile-page">
    <h1 title="{{ user }}">Posts</h1>

{% for post in posts %}
<div class="content">
<div class="post">
        <h1 class='posttitle'>{{ post.title }}</h1>
        <img class="user-image" src="{{ post.author.userprofileinfo.image.url }}" alt="pfp" width="20%" height="20%">
                {% if post.published_date %}
                    <!-- <div class="postdate">
                        <i class="fas fa-calendar-day"></i> &nbsp; <p>Posted {{ post.published_date|timesince }} ago</p>
                    </div>   -->
                    <div class="posted-by">
                        <p>Posted by <strong>{{ post.author }}</strong>  {{ post.published_date|timesince }} ago</p>
                    </div>
                {% else %}
                    <a class="pub-post" href="{% url 'mainapp:post_publish' pk=post.pk %}">Publish</a>
                {% endif %}

              <p class='postcontent' >{{ post.text|safe|linebreaksbr }}</p>
                  </div>
                  </div>
{% endfor %}
</div>
</div>
{% endblock %}

А вот страница user_posts

{% block content %}
<div class="sidebar">
        <p class="active" href="#">{{ view.kwargs.username }}</p>
        <button class="commentbtn"><a class="aclass" href="#">Connect with {{ view.kwargs.username }}</a></button>
        <p>{{ user.userprofileinfo.email }}</p>
        <p>Lorem</p>
      </div>


{% for post in posts %}
<div class="content">
<div class="post">
        <h1 class='posttitle'>{{ post.title }}</h1>
        <img class="user-image" src="{{ post.author.userprofileinfo.image.url }}" alt="pfp" width="20%" height="20%">
                {% if post.published_date %}
                    <!-- <div class="postdate">
                        <i class="fas fa-calendar-day"></i> &nbsp; <p>Posted {{ post.published_date|timesince }} ago</p>
                    </div>   -->
                    <div class="posted-by">
                        <p>Posted by <strong>{{ post.author }}</strong>  {{ post.published_date|timesince }} ago</p>
                    </div>
                {% else %}
                    <a class="pub-post" href="{% url 'mainapp:post_publish' pk=post.pk %}">Publish</a>
                {% endif %}

              <p class='postcontent' >{{ post.text|safe|linebreaksbr }}</p>
                  </div>
                  </div>
{% endfor %}
{% endblock %}

Я попытался объединить FBV с CBV, вырезав его и вставив нижеметод get_queryset Вот так

def get_queryset(self):
    #... code here
def view_profile(request,pk=None):
    #... code here

Однако это не сработало. Мне просто интересно, как я могу объединить оба вместе, чтобы я мог получить лучшее из обоих миров в одном месте

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...