【问题标题】:Django messages does not workDjango 消息不起作用
【发布时间】:2019-01-18 18:20:46
【问题描述】:

我正在尝试同时使用 django 消息和引导程序。

我也检查了这个问题;

django messages not showing

但是,我已经应用了那里写的内容。

我的 settings.py;

from django.contrib.messages import constants as messages

# some other codes #

MESSAGE_TAGS = {
messages.DEBUG: 'alert-info',
messages.INFO: 'alert-info',
messages.SUCCESS: 'alert-success',
messages.WARNING: 'alert-warning',
messages.ERROR: 'alert-danger',
}

# some other codes #

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
.
.
# other apps
]

# some other codes #

MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django_pdb.middleware.PdbMiddleware',
]

# some other codes #

TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [os.path.join(BASE_DIR, 'templates')],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
            'django.template.context_processors.debug',
            'django.template.context_processors.request',
            'django.template.context_processors.media',
            'django.contrib.auth.context_processors.auth',
            'django.contrib.messages.context_processors.messages',
        ],
    },
},
]

我的产品/views.py;

# some other imports #

from django.contrib import messages

# some other codes # 

def oxford(request):
    search_result = {}
    if 'word' in request.GET:
        form = DictionaryForm(request.GET)
        if form.is_valid():
            search_result = form.search()
            messages.success(request, 'Your query is successful!')
    else:
        form = DictionaryForm()
        messages.warning(request, 'Please correct the error.')
    return render(request, 'products/oxford.html', {'form': form, 'search_result': search_result})

我的产品/urls.py;

# some imports here #

app_name = 'products'
urlpatterns = [
    path('', views.IndexView.as_view(), name='base'),
    path('<int:pk>/', views.DetailView.as_view(), name='detail'),
    path('oxford/', views.oxford, name='oxford'),
    # some other urls here #
]

myproject/templates/dashboard.html(不在应用文件夹中);

{% load static %}

<html lang="en">
    <head>
        # some code here #
    </head>
    <body>
        # some code here #
        {% block main %}
        {% endblock main %}
    </body>
</html>

products/templates/products/base_products.html;

{% extends 'dashboard.html' %}

{% block page_main_title %}
{% endblock page_main_title %}

{% block list_html_app_css %}
{% endblock list_html_app_css %}

{% block main %}
  {% block show_message %}
  {% endblock show_message %}
{% endblock main %}

{% block graph %}
{% endblock graph %}

products/templates/products/oxford.html;

{% extends 'products/base_products.html' %}
{% load static %}

{% block main %}
  <main>
    <div>
      # some code here #
    </div>

    <div class="border-bottom">
      {% block get_oxford %}

      <h2>Oxford Dictionary</h2>

      <form method="get">
      {{ form.as_p }}
        <button type="submit">search</button>
      </form>

      {% if search_result %}
        <hr>
        {% if search_result.success %}
          {% for result in search_result.results %}
            <h3>{{ result.word }}</h3>
              {% for lexicalentry in result.lexicalEntries %}
                 <h4>{{ lexicalentry.lexicalCategory }}</h4>
                 <ul>
                 {% for entry in lexicalentry.entries %}
                    {% for sense in entry.senses %}
                       {% for definition in sense.definitions %}
                          <li>{{ definition }}</li>
                       {% endfor %}
                    {% endfor %}
                 {% endfor %}
                 </ul>
              {% endfor %}
          {% endfor %}
       {% else %}
         <p><em>{{ search_result.message }}</em></p>
       {% endif %}
     {% endif %}

     {% endblock get_oxford %}
   </div>
   <div class="container">
    {% block show_message %}
      {% include 'products/messages.html' %}
    {% endblock show_message %}
   </div>
 </main>

{% endblock main %}

products/templates/products/messages.html;

{% if messages %}
  {% for message in messages %}
    <div class="alert alert-{{ message.tags }} alert-dismissible" role="alert">
      <button type="button" class="close" data-dismiss="alert" aria-label="Close">
        <span aria-hidden="true">&times;</span>
      </button>
      {{ message }}
    </div>
  {% endfor %}
{% endif %}

我在这里找不到我缺少的东西。感谢您的时间和回答。

【问题讨论】:

    标签: django python-3.x bootstrap-4 django-messages


    【解决方案1】:

    如果表单对尝试无效,请添加其他消息:

    # some other imports #
    
    from django.contrib import messages
    
        # some other codes # 
    
    def oxford(request):
        search_result = {}
        if 'word' in request.GET:
            form = DictionaryForm(request.GET)
            if form.is_valid():
                search_result = form.search()
                messages.success(request, 'Your query is successful!')
            else:
                messages.warning(request, 'form is not valid.')
        else:
            form = DictionaryForm()
            messages.warning(request, 'Please correct the error.')
        return render(request, 'products/oxford.html', {'form': form, 'search_result': search_result})
    

    【讨论】:

    • 并在您的视图顶部制作了 juste 'messages.add_message(request, messages.INFO, 'ok"')',
    • 如果我在查看函数之前编写它,那么我会收到NameError: name 'request' is not defined 错误,我认为这是正常的。我试图在search_result = {} 之前写这个,但仍然没有变化。
    • {% if messages %} &lt;ul class="messagelist"&gt;{% for message in messages %} &lt;li{% if message.tags %} class="{{ message.tags }}"{% endif %}&gt;{{ message|capfirst }}&lt;/li&gt; {% endfor %}&lt;/ul&gt; {% endif %} 放入你的模板
    • 我用你的更改了我的 messages.html 代码,然后我可以看到这些消息,但是为什么我不能应用引导警报的功能,如下所示:v4-alpha.getbootstrap.com/components/alerts ?
    • 你可以用你的 div 封装代码&lt;div class="alert alert-{{ message.tags }} alert-dismissible" role="alert"&gt;
    猜你喜欢
    • 2014-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 2017-02-04
    相关资源
    最近更新 更多