繁体   English   中英

Django 显示用户图像

[英]Django display Image of User

Good Day,每个用户都有一个图像,我如何显示特定的用户图像?

\\models.py

class UserImage(models.Model):
    user = models.OneToOneField(
        settings.AUTH_USER_MODEL, default=None, null=True, on_delete=models.CASCADE)
    photo = models.ImageField(
        upload_to='images/', height_field=None, width_field=None, max_length=100)

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

\\forms.py

class UserImageForm(forms.ModelForm):
    class Meta:
        model = UserImage

        fields = (
            'photo',
        )

\\views.py

def photo_view(request):
    try:
        profile = request.user.userimage
    except UserImage.DoesNotExist:
        profile = UserImage(user=request.user)

    if request.method == 'POST':
        form = UserImageForm(request.POST, request.FILES, instance=profile)
        if form.is_valid():
            form.save()
            return redirect('/dashboard/user/photo')
    else:
        form = UserImageForm(instance=profile)

    return render(request, 'photo.html', {'form': form, 'profile': profile})

测试.html

<img src="{{ WhatHere? }}" alt="User Profile Image" />

所以在 src="" 中必须是 URL 到用户添加的图像。 每个用户只能看到他自己的图像,而不是应该显示所有现有的图像。

编辑 \\settings.py

LOGIN_URL = '/signin'
LOGIN_REDIRECT_URL = '/signin'

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), "static")

\\ 网址.py

from django.contrib import admin
from django.urls import path
from django.conf import settings
from django.contrib.staticfiles.urls import staticfiles_urlpatterns

from abstractuser.views import (
    signup_view,
    signin_view,
    signout_view,
)

from dashboard.views import (
    dashboard_home_view,
    title_delete,
    profile_view,
    photo_view,
)

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    path('signup/', signup_view),
    path('signin/', signin_view),
    path('signout/', signout_view),
    path('dashboard/home', dashboard_home_view),
    path('dashboard/title/delete/<int:title_id>',
         title_delete, name="delete_title"),
    path('dashboard/user/profile/', profile_view),
    path('dashboard/user/photo/', photo_view),
]

我想我必须在 urls.py 中添加一些东西,但我不知道是什么

您可以使用

<img src="{{ profile.photo.url }}" alt="User Profile Image" />

在您的 settings.py 中,您必须设置MEDIA_URLMEDIA_ROOT AS

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

MEDIA_URL = '/media/'

在你项目的主要urls.py

from django.conf import settings 
from django.conf.urls.static import static 


urlpatterns = [
    path('admin/', admin.site.urls),
    path('signup/', signup_view),
    path('signin/', signin_view),
    path('signout/', signout_view),
    path('dashboard/home', dashboard_home_view),
    path('dashboard/title/delete/<int:title_id>',
     title_delete, name="delete_title"),
    path('dashboard/user/profile/', profile_view),
    path('dashboard/user/photo/', photo_view),
]

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM