ПОСТ ПОИСКУЕТ ПОЛЬЗОВАТЕЛЕЙ В БАЗЕ ПОЛЬЗОВАТЕЛЕЙ И ОБРАЩАЕТСЯ В ПРОФИЛЬНУЮ СВЯЗЬ С ОРИГИНАЛЬНЫМ ТЕКСТОМ - PullRequest
0 голосов
/ 27 января 2020

Привет, ребята, я новичок в Django и пытаюсь заставить работать определенную вещь, так что извините, если я сделал предыдущие посты, но я делаю большие успехи.

Что я пытаюсь do - это когда пользователь отправляет сообщение в базу данных, которую он сканирует, чтобы увидеть, упоминается ли в нем пользователь, так что когда он отображает как html, он превращает упомянутого в сообщении пользователя в URL-ссылку для этого профиля пользователя вместе с Оригинальный текст. Таким образом, пост такой же, только если упоминается пользователь, это имя пользователя в виде ссылки на его или ее профиль в исходном тексте. Это то, что рендерит прямо сейчас, когда отправлено сообщение.

сообщение, отправленное пользователем

, как вы можете видеть, @devil - это пользователь, и его имя пользователя со ссылкой появляется над ним, но не в данных сообщения. Как бы я go сделал это так, чтобы публикация проверялась на наличие пользователя в базе данных, если он был перед ней в виде символа "@", и возвращала имя пользователя в виде ссылки на его профиль.

Это код views.py для отправки сообщения, как вы видите, я пытаюсь использовать метод .split, но он просто печатает имя пользователя в терминале работающего сервера.

   def get(self, request):
        form = HomeForm()
        posts = Status1.objects.filter(user=request.user).order_by('-id')
        users = User.objects.all()
        args = {'form':form, 'posts':posts, 'users':users}

        return render(request, self.template_name, args)

    def post(self, request, pk=None):
        form = HomeForm(request.POST)
        users = User.objects.all()
        if pk:
            user = User.objects.get(pk=pk)
        else:
            user = request.user
        if form.is_valid():
            post = form.save(commit=False)
            post.user = request.user
            post.save()
            for username in post.post.split():
                if username.startswith("@"):
                    user = User.objects.get(username=username)
                    username = user
                    print(username)

            text = form.cleaned_data['post']
            form = HomeForm()
            return redirect('home')

Это мои модели. py

class Status1(models.Model):
    post = models.CharField(max_length=333)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    date = models.DateTimeField(auto_now=True)

Это мои views.py для пользователей

def profile(request, username, pk=None):
    if pk:
        user = User.objects.get(pk=pk)
    else:
        user = request.user
    u = User.objects.get(username=username)
    users = User.objects.all()
    context = {'users' : users, 'user' : user}
    return render(request, 'users/profile.html', context)

Это мои пользователи urls.py

urlpatterns = [
    url(r'^$', HomeView.as_view(), name='home'),

    path('register/', user_views.register, name='register'),
    path('<username>', user_views.profile, name='profile'),
    path('<pk>', user_views.profile, name='profile_with_pk'),
    path('admin/', admin.site.urls),
    path('login/', auth_views.LoginView.as_view(template_name='users/login.html'), name='login'),
    path('logout/', auth_views.LogoutView.as_view(template_name='users/logout.html'), name='logout'),
]

...