코딩한걸음
728x90
반응형

1. Today I Learned


1.1. 어떤 문제가 있었는지

TIL 다 썼는데 수정하다가 삭제눌러서 다시씀 ㅠㅠㅠㅠㅠㅠㅠ

 

장고 프로젝트에 이미지파일을 추가하고 싶었음


1.2. 내가 시도해 본 것들

<python />
## main/settings.py MEDIA_ROOT = os.path.join(BASE_DIR, 'media') MEDIA_URL = 'media/'

먼저 settings.py에 media 루트와 경로를 설정

 

<python />
## main/urls.py from django.contrib import admin from django.urls import path,include from django.conf import settings from django.conf.urls.static import static from django.views.generic import TemplateView urlpatterns = [ path('', TemplateView.as_view(template_name="account.html")), path("admin/", admin.site.urls), path('user/',include('user.urls')), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

urls.py에 media 경로 를 추가

 

근데 urls.py가 이미지 파일을 사용할 app의 urls.py가 아니라

프로젝트의 메인 urls.py였다..  이거때문에 조금 고생함


1.3. 어떻게 해결 했는지

그 이후론 탄탄대로

 

<python />
## user/models.py class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) subscript = models.CharField("유저소개문(짧게)", max_length=200, blank=True) profile_image = models.ImageField("유저이미지", upload_to='profile_images/', blank=True, null=True) follows = models.ManyToManyField( 'self', through='Follow', related_name='follwers', symmetrical=False)

모델 설정, 이미지필드는 유저에따라 사용하지 않을수도 있으니 공백과 null값을 허용해주는게 좋다

 

<python />
## user/forms.py class ProfileForm(forms.ModelForm): class Meta: model = Profile fields = ['subscript','profile_image']

장고 프로젝트 하면서 익숙해진 폼을 만들어주고

 

<python />
## user/views.py @login_required def user_mypage_update(request): if request.method == 'POST': form = UserUpdateForm(request.POST, instance=request.user) profileform = ProfileForm(request.POST, request.FILES, instance=request.user.profile) if form.is_valid() and profileform.is_valid(): form.save() profileform.save() messages.success(request, '프로필이 업데이트 되었습니다!') return redirect('/user/mypage') else: user_form = UserUpdateForm(instance=request.user) profile_form = ProfileForm(instance=request.user.profile) return render(request, 'user/mypage_update.html', {'form': user_form, 'profileform': profile_form})

프로필 업데이트 할 views.py를 설정해주고

 

<html />
## templates/user/mypage.html {% block content %} <h1>마이페이지</h1> {% if user.profile.profile_image %} <img src="{{ user.profile.profile_image.url }}" alt="프로필 이미지"> {% else %} <img src="{% static 'default_profile_image.jpg' %}" alt="기본 프로필 이미지"> {% endif %}

html에서 프로필 이미지를 보여주면 끝 !


1.4. 무엇을 새롭게 배웠는지

장고에서 이미지를 보여주는 과정과 특성을 배웠다

장고는 db에 과부하를 주는 이미지나 파일들을 직접 저장하지 않고, 경로만 저장한다

 

728x90
반응형
profile

코딩한걸음

@Joonyeol_Yoon

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!