2014-12-08 100 views
0

我有一个问题,这是我的代码
当uploade形象的成功,这将返回所有数据(item=Item.objects.all()),并显示在模板
如果我只想要的图片是只是由用户上传以显示模板(不是数据库中的所有图像),我该怎么做?
请指导我!
非常感谢。Django的上传图片并显示图像

views.py

def background(request): 
    if request.method=="POST": 
     img = ItemForm(request.POST, request.FILES) 
     if img.is_valid(): 
      img.save() 
      return HttpResponseRedirect(reverse('imageupload:background'))  
     img=ItemForm() 
    item=Item.objects.all() 
    return render(request,'uploader/background.html',{'form':img,'item':item,}) 

models.py

from sorl.thumbnail import ImageField 
class Item(models.Model): 
    image = ImageField(upload_to='thumb/') 
class ItemForm(forms.ModelForm): 
    class Meta: 
     model = Item 

模板:

<form action="#" method="post" enctype="multipart/form-data"> 
{% csrf_token %} 
    {{form}} <input type="submit" value="Upload" /> 
</form> 

{% for i in item%} 
    {{i.image}} 
     {% thumbnail i.image "1024" crop="center" format="PNG" as im %} 
      <img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}"> 
     {% endthumbnail %} 
{% endfor %}  

回答

0

你可以有ID那里当保存。只需在会话中设置ID。所以,当redirecting,你可以拥有这photo & user也喜欢... ID

photoId = request.session['photoId'] 
userId = request.session['_auth_user_id'] 
item=Item.objects.get(pk=photoId) #you can also use filter by userId 

代码:

if img.is_valid(): 
    img.save() 
    request.session['photoId'] = img.id 
    return HttpResponseRedirect(reverse('imageupload:background')) 
0

如果添加了可用于场会更好跟踪您最新上传的图片。

class Item(models.Model): 
    image = ImageField(upload_to='thumb/') 
    upload_time = models.DateTimeField(auto_now=False, auto_now_add=True) 

在这里,我添加了一个名为upload_time一个更费尔德与参数auto_now_add=True.

DateField.auto_now_add 

Automatically set the field to now when the object is first created. 
Useful for creation of timestamps. Note that the current date is always used; 
it’s not just a default value that you can override. 

之后,你可以从Item模型中使用latest方法得到的最新对象。

def background(request): 
    if request.method=="POST": 
     img = ItemForm(request.POST, request.FILES) 
     if img.is_valid(): 
      img.save() 
      return HttpResponseRedirect(reverse('imageupload:background'))  
    img=ItemForm() 
    item=Item.objects.latest('upload_time') 
    return render(request,'uploader/background.html',{'form':img,'item':item,}) 

关于最新:

latest(field_name=None) 
Returns the latest object in the table, by date, using the field_name provided as the date field. 

所以你会得到那么单一的对象就不会被要求重复它在你的模板。

{{item.image}} 
{% thumbnail item.image "1024" crop="center" format="PNG" as im %} 
    <img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}"> 
{% endthumbnail %} 
0

您不必使用会话并重定向或添加任何额外的字段。 ModelForm save() method返回刚刚保存的对象。试试这个:

# views.py 
def background(request): 
    form = ItemForm(request.POST or None, request.FILES or None) 
    item = None 
    if request.method=="POST" and form.is_valid():  
     item = form.save() 
    return render(request,'uploader/background.html',{'form': form,'item': item,}) 


# template 
<form action="#" method="post" enctype="multipart/form-data"> 
{% csrf_token %} 
    {{form}} <input type="submit" value="Upload" /> 
</form> 

{% if item %} 
    {{ item.image }} 
     {% thumbnail item.image "1024" crop="center" format="PNG" as im %} 
      <img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}"> 
     {% endthumbnail %} 
{% endif %} 
0

我做了一些稍微不同的事情。我的视图每次动态呈现图形图像(图像),因此它不在数据库中。但是为了从我的模型中嵌入一个图形的实例,这是我做的:

首先,我提出了一个视图,它从我的数据呈现图形并创建了一个到它的url(使用它的id进行选择) :

url(r'^graphs/graphImage/(?P<graph_id>\d+?)/$', 'hydro.views.render_graph', name='graphImage'), 

没有必要显示我的看法,但如果我去了那个网址,我的视图将被调用,它会呈现图形和只有图形。与大多数网站类似,如果您点击图片,您只会看到只显示图片的网页。

现在有了这个网址的工作:

url(r'^graphs/(?P<graph_id>\d+?)/$', 'hydro.views.single_graph', name='graph_detail'), 

这种观点带来了这个坏小子的模板:

{% url 'graphImage' graph.id as the_graph %} 
     <img src="{{the_graph}}" alt="{{the_graph}}"/> 

的URL部分抓住我的graphImage网址,并用它输入graph.id 。然后我把它命名为the_graph以保持简单。

然后我使用图像标签作为src作为_graph。不要担心它只是显示网址,如果它不适用于调试。

因此,我所做的是在一个网页上绘制图形,并将其用作图像标记的来源。这里有一百万种方法来做这种事情,但这是最明显的,我的技能有限,只知道html和django。