альтернативные механизмы представления asp.net MVC

Прежде всего, вам следует немного изменить свой статус.

STATUSES = (
(0, 'unpaid'),
(1, 'paid')
)

class Post_Paid_Sell_Tut(models.Model):
    paying_user = models.ForeignKey(User, on_delete=models.CASCADE)
    post_sell_tut = models.ForeignKey(Post_Sell_Tut, on_delete=models.CASCADE)
    STATUS = models.IntegerField(choices=STATUSES, default=0)

Это облегчит последующие поиски в базе данных и прояснит проблемы. Тогда, если вы просто обновляете статус, вам не нужна никакая форма.

def post_sell_tut_buy(request, pk):
    post = get_object_or_404(Post_Sell_Tut, pk=pk)
    if request.user == post.author:
        messages.error(request, 'You cant buy your own Post!')
        return redirect('post_sell_tut_detail', pk=pk)
    else:
        template = 'Post_Sell_Tut/post_sell_tut_buy.html'
        post.STATUS = 1  # You are updating the STATUS
        post.save() # you are writing the change to database
        context = {
            'post': post
        }
        return render(request, template, context)

Кроме того, передавая post экземпляр в шаблон, вы хотите просмотреть информацию, вы должны следовать этому:

def post_sell_tut_buy(request, pk):
    post = Post_Paid_Sell_Tut.objects.select_related('post_sell_tut').filter(pk=pk)
    if request.user == post.author:
        messages.error(request, 'You cant buy your own Post!')
        return redirect('post_sell_tut_detail', pk=pk)
    else:
        template = 'Post_Sell_Tut/post_sell_tut_buy.html'
        post.STATUS = 1  # You are updating the STATUS
        post.save() # you are writing the change to database
        context = {
            'post': post
        }
        return render(request, template, context)

Я добавил select_related, потому что, когда вы пытаетесь получить информацию по внешнему ключу из post это не вызовет дополнительный запрос к БД .

ОБНОВЛЕНИЕ

def post_sell_tut_buy(request, pk):
    post = Post_Sell_Tut.objects.select_related('author).filter(pk=pk)
    if request.user == post.author:
        messages.error(request, 'You cannot buy POst(s) you created by your own!')
        return redirect('post_sell_tut_detail', pk=post.pk)
    else:
        template = 'Post_Sell_Tut/post_sell_tut_buy.html'
        context = {
            'post': post,
        }
        return render(request, template, context)

Вы не можете получить доступ к STATUS из модели Post_Sell_Tut. У него нет этого поля.

def post_sell_tut_buy_exec(request, pk):
    post_sell_tut = get_object_or_404(Post_Sell_Tut, pk=pk)
    post_paid_sell_tut = Post_Paid_Sell_Tut.objects.filter(post_sell_tut=post_sell_tut)
    if request.user == post.author:
        messages.error(request, 'You cannot buy Post(s) you created by your own!')
        return redirect('post_sell_tut_detail', pk=post.pk)
    else:
        template = 'Post_Sell_Tut/post_sell_tut_buy.html'
        post_paid_sell_tut.STATUS = 1
        post_paid_sell_tut.save()
        context = {
            'post': post
        }
        return render(request, template, context)
6
задан codette 16 March 2009 в 09:37
поделиться

3 ответа

Я предложил бы, чтобы Вы взяли каждый из вышеупомянутых Механизмов Представления, запишите представление и посмотрите который работы лучше всего для Вас. Вы могли бы найти, что для различных приложений или даже для differnt типов представления, что выбор Механизма Представления изменяется.

Если Вы возвращаете HTML своему клиенту затем, механизм как Spark мог бы быть соответствующим. Однако, если conent, который Вы возвращаете, будет XML или некоторой другой разметкой (JSON, например) затем, то Spark не будет большим количеством справки. NHaml также фокусируется на поколении XHTML.

Рассмотрите, как Вы хотите протестировать свои представления, набор навыков Ваших инженеров (и разработчики и тестеры), уровень поддержки, которую Вы надеетесь получить от своего писателя Механизма Представления (при нахождении ошибок как Вы хотите те развернутые исправления ошибок) и есть ли у Вашего клиента какое-либо предпочтение.

В основном - пробуют некоторых, видят то, что Вы любите, используйте смесь их, если Вы находите, что это имеет смысл.

О, и вот хорошее сообщение, которое перечисляет 4 альтернативных механизма...

http://codebetter.com/blogs/jeffrey.palermo/archive/2008/01/27/mvccontrib-now-offers-four-4-alternative-view-engines-for-asp-net-mvc.aspx

... это упоминает механизм XSLT, который мог бы быть соответствующим, если Вы надеетесь генерировать XML.

3
ответ дан 17 December 2019 в 00:14
поделиться

В программном обеспечении нет никакой "лучшей" альтернативы. Это всегда зависит в Вашем образовании, компания, Вы работаете на, Ваши предпочтения, Ваши вкусы, и т.д.

Просто выберите что работа лучше всего для Вас для текущего проекта. Если Вы не уверены, выберите безопасный путь, MS путь :)

2
ответ дан 17 December 2019 в 00:14
поделиться

StringTemplate - достойная альтернатива.

Вот ViewEngine (с исходным кодом) и несколько руководств .

2
ответ дан 17 December 2019 в 00:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: