django에서 ImageField 사용 상세 정보
6758 단어 djangoImageField
ImageField 사용 노트
오늘 숙제를 작성한 주문 시스템을 보완하는 것은 주로 모든 메뉴에 그림을 추가하고 보기 좋게 하는 것이다. 그러나 이 작은 수요가 나에게 하루의 시간을 들일 줄은 생각하지 못했다. 기록해 보니 지식을 늘린 셈이다.
사용 프로세스
1. 설정 파일 구성
MEDIA_ROOT는 이미지를 업로드하는 루트 디렉토리를 나타냅니다. MEDIA_URL은 파일에 접근할 때 URL의 접두사를 나타냅니다.
#
MEDIA_ROOT = join('media')
# url
MEDIA_URL = '/IMG/'
2. 모델에 ImageField 속성 추가
up_load는 반드시 설정해야 합니다. 마지막 그림이 MEDIA에 저장된다는 것을 의미합니다_ROOT/up_load (사실은 당신이 부여한 이름) 이 폴더에 있습니다.
class Menu(models.Model):
"""
"""
ID = models.BigAutoField(primary_key=True,editable=False)
lastEditTime = models.DateTimeField(auto_now_add=True)
merchantID = models.ForeignKey(Usr, verbose_name=" ", on_delete=models.CASCADE,to_field='ID')
itemName = models.CharField(max_length=20,verbose_name=" ")
itemText = models.TextField(verbose_name=" ")
price = models.FloatField(verbose_name=" ")
################# up_load
picture = models.ImageField(verbose_name=' ',null=True,upload_to='img/')
class Meta:
db_table = "Menu"
verbose_name = " "
ordering=['-lastEditTime']
3. Form 양식 클래스
이 프로젝트는django가 가지고 있는Form 폼 클래스를 사용하여 데이터를 전달합니다.
class MerchantDish(forms.Form):
"""
"""
itemName = forms.CharField(max_length=20,label=" ")
itemText = forms.CharField(max_length=300,label=" ")
price = forms.FloatField(label=" ")
picture = forms.ImageField(label=' ')
4.html 템플릿 파일(메뉴 추가)
반드시 추가해야 합니다:enctype="multipart/form-data".
<form action="updateDish_post/" method="post" enctype="multipart/form-data">
{% csrf_token %} {{form.as_p}}
<button type="submit"> </button>
<button type="button"><a href="/MerchantSystem/DelDish/{{dishID}}/" rel="external nofollow" > </a></button>
</form>
5. 메뉴의 html 템플릿 파일 표시
중요한 것은 src에서 경로의 설정입니다. 두 가지 방법이 있습니다. 건의법은 첫째, 자신이 비교적 안전하다고 느끼고picture가 없어도 틀리지 않습니다.(주의: 그림 표시 크기 조정 가능)
법1:/IMG (당신이 정의한 MEDIA_URL)/{{dish.picture} ---dish는 백엔드에서 전해오는 메뉴,dish를 대표합니다.picture는 당신이 사용하는 이 클래스의 ImageField 속성이 있는 필드를 대표합니다.
법2: {{dish.picture.url}} ImageField는 파일 클래스이기 때문에 세 개의 속성name,path,url에 직접 접근할 수 있습니다.
{% for dish in menu %}
<!-- html -->
<!-- url -->
<form action="/MerchantSystem/Dish/{{dish.ID}}/" method="post">
{% csrf_token %}
<li class="media">
<div class="media-left media-middle" >
<img class="media-object" width="150" height="150" src="/IMG/{{dish.picture}}" alt="">
</div>
<div class="media-body">
<h4 class="media-heading">
<button type='submit' class=" url" title=" ">
:{{dish.itemName|default:"Null"}}
</button>
<span class="label label-default">
:{{dish.price|default:"Null"}}
</span>
</h4>
:{{dish.itemText|default:"Null"}}
</div>
</li>
</form>
{% empty %}
<!-- -->
<p> ..</p>
{% endfor %} {% endblock tableBody %}
6. 경로 정태화
모든 URL에 다음과 같이 설정해야 합니다. URL patterns + static...
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('', views.base_view, name = "base"),#
path('order/<int:dishID>/', views.order_view),#
path('order/<int:dishID>/submit/',views.order_submit),#
path('pay/<int:orderID>/', views.pay_view),#
path('pay/<int:orderID>/submit/',views.pay_submit),#
path('order/list/',views.order_list_view),#
path('order/confirm/<int:orderID>/',views.order_confirm),#
path('order/comment/<int:orderID>/',views.comment),#
path('order/comment_post/<int:orderID>/',views.comment_post)#
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
7. 업로드된 이미지 수정
우선 폼으로 그림을 올리고 유효성을 검사한 후cleaned_데이터의picture 데이터는 업데이트할 대상의picture 속성에 값을 부여하고 마지막으로save하면 됩니다.코드는 다음과 같습니다.
def updateDish_post(request,dishID):
"""
"""
dish_form = MerchantDish(request.POST,request.FILES)
if dish_form.is_valid() :
dish = Menu.objects.get(ID = dishID)
dish.itemName = dish_form.cleaned_data['itemName']
dish.itemText = dish_form.cleaned_data['itemText']
dish.price = dish_form.cleaned_data['price']
dish.picture = dish_form.cleaned_data['picture']
dish.save()
# dishChange = dish_form.clean()
return redirect('/MerchantSystem/')
elif dish_form.errors is not None:
print(dish_form.errors)
return HttpResponse(str(dish_form.errors))
8. 기본 그림 설정
이 단계에서 나는 오랫동안 자료를 조사했지만 모두 안 된다. 모델에 직접 있으면 안 될 것 같다.py 파일에default를 설정하면 저는 마지막에 포기할 것 같습니다. 하지만 저는 운에 따라 시험해 보았습니다. 원리를 모르지만 여기에 두겠습니다. 여러분에게 도움이 되었으면 합니다.
방법은 그림을 표시하는 html 템플릿의 src에 default를 쓰는 것입니다. 코드는 다음과 같습니다.
dish는 백엔드에서 전송된 매개 변수입니다. default는 기본 그림이 있는 위치를 가리킵니다.
<div class="media-left media-middle" >
<!-- {{dish.url|default:"Null"}} -->
<img class="media-object" width="150" height="150" src="/IMG/{{dish.picture|default:'img/default.jpg'}}" alt="">
</div>
참고 자료:
ImageField 사용
기본 그림의 값 부여 (방법이 안 될 것 같아)
django에서 Image Field의 사용에 대한 상세한 설명은 여기 있습니다. 더 많은 django Image Field 관련 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django의 질문 및 답변 웹사이트환영 친구, 이것은 우리의 새로운 블로그입니다. 이 블로그에서는 , 과 같은 Question-n-Answer 웹사이트를 만들고 있습니다. 이 웹사이트는 회원가입 및 로그인이 가능합니다. 로그인 후 사용자는 사용자의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.