2017-04-15 1 views
0

Ich bin neu in Django und ich habe ein paar Vorschläge ausprobiert, aber es scheint nicht zu funktionieren. Ich versuche, ein Blog-Post-Modell mit einem Kategorieabschnitt zu erstellen und mit den Kategorien in meiner Vorlage zu verknüpfen. Meine Codes sind wie folgt.Wie erstelle ich einen Link zu einem Kategoriebereich in meinen Vorlagen?

from django.db import models 
from django.utils import timezone 
from django.contrib.auth.models import User 
from django.core.urlresolvers import reverse 
from taggit.managers import TaggableManager 


# Create your models here. 

class PublishedManager(models.Manager): 
    def get_queryset(self): 
     return super(PublishedManager, self).get_queryset().filter(status='published') 


class MoneyManager(models.Manager): 
    def get_queryset(self): 
     return super(MoneyManager, self).get_queryset().filter(category='money') 


class LoveManager(models.Manager): 
    def get_queryset(self): 
     return super(LoveManager, self).get_queryset().filter(category='love') 


class WeightlossManager(models.Manager): 
    def get_queryset(self): 
     return super(WeightlossManager, self).get_queryset().filter(category='weightloss') 


def get_image_filename(instance, filename): 
    title = instance.post.title 
    slug = slugify(title) 
    return "post_images/%s-%s" % (slug, filename) 


class Post(models.Model): 
    STATUS_CHOICES = (
     ('draft', 'Draft'), 
     ('published', 'Published'), 
    ) 
    CATEGORY_CHOICES = (
     ('money', 'Money'), 
     ('love', 'Love'), 
     ('weightloss', 'Weightloss') 
    ) 
    title = models.CharField(max_length=250) 
    slug = models.SlugField(max_length=250, 
          unique_for_date='publish') 
    author = models.ForeignKey(User, related_name='blog_posts') 
    image = models.ImageField(upload_to='get_image_filename', verbose_name='Image', blank=True) 
    body = models.TextField() 
    image2 = models.ImageField(upload_to='get_image_filename', verbose_name='Image', blank=True) 
    body2 = models.TextField(blank=True) 
    image3 = models.ImageField(upload_to='get_image_filename', verbose_name='Image', blank=True) 
    body3 = models.TextField(blank=True) 
    publish = models.DateTimeField(default=timezone.now) 
    created = models.DateTimeField(auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True) 
    status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft') 
    objects = models.Manager() 
    published = PublishedManager() 
    category = models.CharField(max_length=10, choices=CATEGORY_CHOICES) 
    money = MoneyManager() 
    love = LoveManager() 
    weightloss = WeightlossManager() 
    tags = TaggableManager() 

    class Meta: 
     ordering = ('-publish',) 

    def __str__(self): 
     return self.title 

    def get_absolute_url(self): 
     return reverse('blog:post_detail', 
         args=[self.publish.year, 
          self.publish.strftime('%m'), 
          self.publish.strftime('%d'), 
          self.slug]) 


class Comment(models.Model): 
    post = models.ForeignKey(Post, related_name='comments') 
    name = models.CharField(max_length=80) 
    email = models.EmailField() 
    body = models.TextField() 
    created = models.DateTimeField(auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True) 
    active = models.BooleanField(default=True) 

    class Meta: 
     ordering = ('created',) 

    def __str__(self): 
     return 'Comment by {} on {}'.format(self.name, self.post) 
     4e2 
     aaefb22cf2adc42680d 
     ' -H ' 
     Content - Type: multipart/form - data 
     ' -POST http://127.0.0.1:8000/api/scan_binary/ -F [email protected]/Users/a.b.gopalakrishna/Desktop/tele.apk -F uuid=a996a142e1ef4a6e9e29dd7f6baf120bfsfds 

Ich mag einen Abschnitt in meinen Vorlagen Kategorie genannt haben, die drei Kategorien angezeigt wird (Geld, Liebe und Abnehm).

Wie gehe ich vor und wie kodiere ich die Vorlage, um dies anzuzeigen? Vielen Dank!

Antwort

0

können Sie verwenden _meta.get_field.("category").choices oder get_category_display für das zu tun, oder Sie können direkt Feld Wahl CATEGORY_CHOICES auf einem dict so wie konvertieren:

def convert_dict_choice(self): 
      category_dict = dict(self.CATEGORY_CHOICES) 
      return category_dict 

So können Sie auf Ihrem view nennen y als Kontext auf Ihrem response passieren für die Vorlage, so wie:

def select_options(request): 
    category_select = Post().convert_dict_choice() 
    return render(
     request, "template/name_template.html",   
     {"data_select":category_select} 
    ) 

Dann Sie die Vorlage so wie tun:

{% extends "base.html" %} 
{% block content %} 
    <div class="category"> 
     <h1>Seccion category</h1> 
     <select name="services" id="services"> 
      {% for category_selectvice in data_select %} 
        <option>{{category_selectvice}}</option>  
      {% endfor %} 
     </select> 
    </div> 
{% endblock content %} 

Wenn Sie mehr Referenz wünschen, besuchen Sie das Dokument django Doc django.

Verwandte Themen