如何让django消息框架与rest_framework一起使用?
这是我的看法
@api_view(['GET', 'POST'])
def myview(request):
if request.method == 'GET':
#return a Response object
else:
#process post data
messages.success(request, 'Success')
return Response(response)
Run Code Online (Sandbox Code Playgroud)
我遇到以下错误
add_message() argument must be an HttpRequest object, not 'Request'
Run Code Online (Sandbox Code Playgroud)
这是因为rest_framework不使用普通HttpRequest对象,默认情况下在django中使用.
如何在休息框架中使用消息传递框架?
我想在保存一行时显示一条成功的消息,使用 Django 的消息框架和基于类的视图,代码如下所示,但不显示消息。
任何帮助将不胜感激
#views.py
from django.views.generic import ListView, CreateView, UpdateView, TemplateView
from django.contrib.messages.views import SuccessMessageMixin
class CreateEmployee(SuccessMessageMixin, CreateView):
model = Employee
template_name = 'employees/create.html'
form_class = frmCreate
def get_success_url(self):
return reverse('Employees:Create')
def get_context_data(self, **kwargs):
contexto = super(CreateEmployee, self).get_context_data(**kwargs)
contexto['action'] = reverse('Employees:Create')
return contexto
success_message = 'Employee successful created'
#template
#create.html
<form action="{{ action }}" method="POST" role="form">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Save" class="btn btn-success">
<form>
{% if messages %}
<div class="col-lg-3 color03">
<ul class="messages">
{% for …Run Code Online (Sandbox Code Playgroud) 我想检查消息标签是否为INFO?
如何在模板文件中检查?
我尝试了这个,但它不起作用:
{% if messages %}
<ul>
{% for message in messages %}
<li>
{% if message.tag == "INFO" %}
{{ message }}
{% endif %}
</li>
{% endfor %}
</ul>
{% endif %}
Run Code Online (Sandbox Code Playgroud)
我甚至尝试了其他类似的组合,message.tag.info == "INFO"但它们似乎没有用.检查它的正确方法是什么?
我有一行代码
messages.error(request, ('ERROR: upload failed. Try again'))
Run Code Online (Sandbox Code Playgroud)
在我的模板中弹出一条消息
上传失败。再试一次
但我想在点之后换一条新线,比如:
上传失败。
再试一次
我怎么得到它?
我试过了
upload failed.\n Try again
Run Code Online (Sandbox Code Playgroud)
和
upload failed.<br/> Try again
Run Code Online (Sandbox Code Playgroud)
和
upload failed.{{text|linebreaks}} Try again
Run Code Online (Sandbox Code Playgroud)
但它不起作用......
尝试了很多东西,但没有一个真的有帮助.
我有一个URL例子:
HTTP://本地主机:8000 /用户/编辑事务/的object_id = 23a959d0561711e59e36acd1b8679265&键入= grossary
它调用如下view:
def edit_transaction(request):
if request.method == "POST":
if something is True:
messages.error(request, 'Error message here')
# this don't work
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
# but this work
template = "user/xyz/abc.html"
render(request, template)
else:
return HttpResponseNotFound()
else:
context = {
'key1': 'value1',
'key2': 'value2',
}
template = "user/xyz/abc.html"
render(request, template, context)
Run Code Online (Sandbox Code Playgroud)
内部模板:
{% if messages %}
<h1>I am inside MESSAGES</h1>
{% for message in messages %}
{% if message.tags == 'success' %} …Run Code Online (Sandbox Code Playgroud) 在检查user_settings用户是否存在(如果它们不存在 - 用户被带到表单输入并保存它们)后,我试图运行重定向。
我想将用户重定向到适当的表单,并告诉他们必须“保存他们的设置”,以便他们知道为什么要重定向。
该函数如下所示:
def trip_email(request):
try:
user_settings = Settings.objects.get(user_id=request.user.id)
except Exception as e:
messages.error(request, 'Please save your settings before you print mileage!')
return redirect('user_settings')
Run Code Online (Sandbox Code Playgroud)
此功能检查用户设置并适当地重定向我 - 但该消息从未出现在模板的顶部。
您可能首先会想:“您的 Django 中的消息设置是否正确?”
我还有其他功能,我使用非重定向消息,消息在模板中按预期显示,没有问题。消息被适当地集成到我的模板中并起作用。
只有当我使用时redirect,我才看到我正在发送的消息。
如果我render像下面这样使用,我会看到消息(但当然,URL 不会改变 - 我希望发生这种情况)。
def trip_email(request):
try:
user_settings = Settings.objects.get(user_id=request.user.id)
except Exception as e:
messages.error(request, 'Please save your settings before you print mileage!')
form = UserSettingsForm(request.POST or None)
return render(request, 'user/settings.html', {'form': form})
Run Code Online (Sandbox Code Playgroud)
我还有其他一些需要使用 a 的地方,redirect …
每当我在管理界面中保存模型时,它都会显示通常的"已成功保存的消息".但是,我想知道是否可以自定义此消息,因为我想要警告用户他刚刚保存的内容以及这些操作的含义.
class PlanInlineFormset(forms.models.BaseInlineFormset):
def clean(self):
### How can I detect the changes?
### (self.changed_data doesn't work because it's an inline)
### and display what he/she just changed at the top AFTER the successful save?
class PlanInline(admin.TabularInline):
model = Plan
formset = PlanInlineFormset
Run Code Online (Sandbox Code Playgroud) 默认情况下,django 消息框架不会正确本地化它的消息。例如在管理界面
正如您所看到的,管理面板中的所有其他内容都已本地化。翻译文件存在。这是我的设置。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
...
]
MIDDLEWARE = [
'debug_toolbar.middleware.DebugToolbarMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.locale.LocaleMiddleware',
]
LANGUAGE_CODE = 'ru' # I've tried 'ru-RU'
TIME_ZONE = 'Europe/Moscow'
USE_I18N = True
USE_L10N = True
USE_TZ = True
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题?提前致谢。我有 Django 3.0.6 版。这个错误在 django 1.8 中也不存在
如何在Django 1.8中使用带有Jinja2的Django消息框架和内置的Jinja2后端?
我试着像以前那样做,但后来记得Jinja2后端没有Django Templating Language的上下文处理器.是否可以通过会话请求.
我一直在使用Django几个月,所以即使答案很明显,请告诉我.
默认情况下,Allauth的消息以文本文件的形式存储在模板目录中,它们类似于:
{% load i18n %}
{% blocktrans %}You cannot remove your primary e-mail address ({{email}}).{% endblocktrans %}
Run Code Online (Sandbox Code Playgroud)
这些使用django的模板标签,但不是“ HTML友好的”。我想对这些样式进行样式设置,例如:
{% load i18n %}
<div class="alert alert-danger alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
{% blocktrans %}You cannot remove your primary e-mail address ({{email}}).{% endblocktrans %}
</div>
Run Code Online (Sandbox Code Playgroud)
但是上面的代码只是将HTML呈现为文本。我不能将HTML放在模板中,而只能在模板中做{{message}},因为我想根据每个消息的偏向(至少是颜色!)来更改其中的一些内容。
我该怎么做?谢谢!
django ×10
django-messages ×10
python ×2
css ×1
django-admin ×1
django-forms ×1
html ×1
jinja2 ×1
messages ×1
newline ×1
redirect ×1