将图片上传到我的网页(本地)后,它将图片添加到数据库,将图片添加到我的媒体目录中,但是在网页上,它似乎已损坏。
settings.py
:
MEDIA_URL = '/uploaded/'
MEDIA_ROOT = os.path.join(BASE_DIR, '../media_root')
views.py
:
class MovieImageUpload(LoginRequiredMixin, CreateView):
form_class = MovieImageForm
def get_initial(self):
initial = super().get_initial()
initial['user'] = self.request.user.id
initial['movie'] = self.kwargs['movie_id']
return initial
def render_to_response(self, context, **response_kwargs):
movie_id = self.kwargs['movie_id']
movie_detail_url = reverse(
'core:MovieDetail',
kwargs={'pk': movie_id})
return redirect(
to=movie_detail_url)
def get_success_url(self):
movie_id = self.kwargs['movie_id']
movie_detail_url = reverse(
'core:MovieDetail',
kwargs={'pk': movie_id})
return movie_detail_url
class MovieDetail(DetailView):
queryset = Movie.objects.all_with_related_persons_and_score()
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
ctx['image_form'] = self.movie_image_form()
if self.request.user.is_authenticated:
vote = Vote.objects.get_vote_or_unsaved_blank_vote(
movie=self.object,
user=self.request.user
)
if vote.id:
vote_form_url = reverse(
'core:UpdateVote',
kwargs={
'movie_id': vote.movie.id,
'pk': vote.id})
else:
vote_form_url = (
reverse(
'core:CreateVote',
kwargs={
'movie_id': self.object.id}
)
)
vote_form = VoteForm(
instance=vote)
ctx['vote_form'] = vote_form
ctx['vote_form_url'] = \
vote_form_url
return ctx
def movie_image_form(self):
if self.request.user.is_authenticated:
return MovieImageForm()
return None
models.py
:
def movie_directory_path_with_uuid(
instance, filename):
return '{}/{}.{}'.format(
instance.movie_id,
uuid4(),
filename.split('.')[-1]
)
class MovieImage(models.Model):
image = models.ImageField(
upload_to=movie_directory_path_with_uuid)
uploaded = models.DateTimeField(
auto_now_add=True)
movie = models.ForeignKey(
'Movie', on_delete=models.CASCADE)
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE)
forms.py
:
class MovieImageForm(forms.ModelForm):
movie = forms.ModelChoiceField(
widget=forms.HiddenInput,
queryset=Movie.objects.all(),
disabled=True
)
user = forms.ModelChoiceField(
widget=forms.HiddenInput,
queryset=get_user_model().objects.all(),
disabled=True,
)
class Meta:
model = MovieImage
fields = ('image', 'user', 'movie')
movie_detail.html
:
<ul class="movie-image list-inline" >
{% for i in object.movieimage_set.all %}
<li class="list-inline-item" >
<img src="{{ i.image.url }}" >
</li >
{% endfor %}
</ul >
除显示图像外,其他所有操作均正常。它显示一个损坏的图标。至于urls.py
,我刚刚在MEDIA_FILE_PATHS
变量中添加了urlpatterns
。