def _set_external_network(self, router, ext_net_dict):
gateway_info = router.external_gateway_info
if gateway_info:
ext_net_id = gateway_info['network_id']
if ext_net_id in ext_net_dict:
gateway_info['network'] = ext_net_dict[ext_net_id]
else:
msg_params = {'ext_net_id': ext_net_id, 'router_id': router.id}
msg = _('External network "%(ext_net_id)s" expected but not '
'found for router "%(router_id)s".') % msg_params
messages.error(self.request, msg)
# gateway_info['network'] is just the network name, so putting
# in a smallish error message in the table is reasonable.
# Translators: The usage is "<UUID of ext_net> (Not Found)"
gateway_info['network'] = pgettext_lazy(
'External network not found',
u'%s (Not Found)') % ext_net_id
python类pgettext_lazy()的实例源码
def resolve(self, context):
"""Resolve this variable against a given context."""
if self.lookups is not None:
# We're dealing with a variable that needs to be resolved
value = self._resolve_lookup(context)
else:
# We're dealing with a literal, so it's already been "resolved"
value = self.literal
if self.translate:
is_safe = isinstance(value, SafeData)
msgid = value.replace('%', '%%')
msgid = mark_safe(msgid) if is_safe else msgid
if self.message_context:
return pgettext_lazy(self.message_context, msgid)
else:
return ugettext_lazy(msgid)
return value
def product_class_edit(request, pk):
product_class = get_object_or_404(
ProductClass, pk=pk)
form = forms.ProductClassForm(request.POST or None,
instance=product_class)
if form.is_valid():
product_class = form.save()
msg = pgettext_lazy(
'Dashboard message', 'Updated product type %s') % product_class
messages.success(request, msg)
return redirect('dashboard:product-class-update', pk=pk)
ctx = {'form': form, 'product_class': product_class}
return TemplateResponse(
request,
'dashboard/product/product_class/form.html',
ctx)
def product_class_delete(request, pk):
product_class = get_object_or_404(ProductClass, pk=pk)
if request.method == 'POST':
product_class.delete()
messages.success(
request,
pgettext_lazy(
'Dashboard message',
'Deleted product type %s') % product_class)
return redirect('dashboard:product-class-list')
ctx = {'product_class': product_class,
'products': product_class.products.all()}
return TemplateResponse(
request,
'dashboard/product/product_class/modal/confirm_delete.html',
ctx)
def stock_edit(request, product_pk, variant_pk, stock_pk=None):
product = get_object_or_404(Product, pk=product_pk)
variant = get_object_or_404(product.variants, pk=variant_pk)
if stock_pk:
stock = get_object_or_404(variant.stock, pk=stock_pk)
else:
stock = Stock()
form = forms.StockForm(
request.POST or None, instance=stock, variant=variant)
if form.is_valid():
form.save()
messages.success(
request, pgettext_lazy('Dashboard message', 'Saved stock'))
return redirect(
'dashboard:variant-details', product_pk=product.pk,
variant_pk=variant.pk)
ctx = {'form': form, 'product': product,
'variant': variant, 'stock': stock}
return TemplateResponse(
request,
'dashboard/product/stock/form.html',
ctx)
def stock_delete(request, product_pk, variant_pk, stock_pk):
product = get_object_or_404(Product, pk=product_pk)
variant = get_object_or_404(product.variants, pk=variant_pk)
stock = get_object_or_404(Stock, pk=stock_pk)
if request.method == 'POST':
stock.delete()
messages.success(
request, pgettext_lazy('Dashboard message', 'Deleted stock'))
return redirect(
'dashboard:variant-details', product_pk=product.pk,
variant_pk=variant.pk)
ctx = {'product': product, 'stock': stock, 'variant': variant}
return TemplateResponse(
request,
'dashboard/product/stock/modal/confirm_delete.html',
ctx)
def product_image_edit(request, product_pk, img_pk=None):
product = get_object_or_404(Product, pk=product_pk)
if img_pk:
product_image = get_object_or_404(product.images, pk=img_pk)
else:
product_image = ProductImage(product=product)
form = forms.ProductImageForm(
request.POST or None, request.FILES or None, instance=product_image)
if form.is_valid():
product_image = form.save()
if img_pk:
msg = pgettext_lazy(
'Dashboard message',
'Updated image %s') % product_image.image.name
else:
msg = pgettext_lazy(
'Dashboard message',
'Added image %s') % product_image.image.name
messages.success(request, msg)
return redirect('dashboard:product-image-list', product_pk=product.pk)
ctx = {'form': form, 'product': product, 'product_image': product_image}
return TemplateResponse(
request,
'dashboard/product/product_image/form.html',
ctx)
def variant_delete(request, product_pk, variant_pk):
product = get_object_or_404(Product, pk=product_pk)
variant = get_object_or_404(product.variants, pk=variant_pk)
if request.method == 'POST':
variant.delete()
messages.success(
request,
pgettext_lazy(
'Dashboard message', 'Deleted variant %s') % variant.name)
return redirect('dashboard:product-detail', pk=product.pk)
ctx = {'is_only_variant': product.variants.count() == 1,
'product': product,
'variant': variant}
return TemplateResponse(
request,
'dashboard/product/product_variant/modal/confirm_delete.html',
ctx)
def attribute_edit(request, pk=None):
if pk:
attribute = get_object_or_404(ProductAttribute, pk=pk)
else:
attribute = ProductAttribute()
form = forms.ProductAttributeForm(request.POST or None, instance=attribute)
formset = forms.AttributeChoiceValueFormset(
request.POST or None, request.FILES or None, instance=attribute)
if all([form.is_valid(), formset.is_valid()]):
attribute = form.save()
formset.save()
msg = pgettext_lazy(
'Dashboard message', 'Updated attribute') if pk else pgettext_lazy(
'Dashboard message', 'Added attribute')
messages.success(request, msg)
return redirect('dashboard:product-attribute-detail', pk=attribute.pk)
ctx = {'attribute': attribute, 'form': form, 'formset': formset}
return TemplateResponse(
request,
'dashboard/product/product_attribute/form.html',
ctx)
def stock_location_edit(request, location_pk=None):
if location_pk:
location = get_object_or_404(StockLocation, pk=location_pk)
else:
location = StockLocation()
form = forms.StockLocationForm(request.POST or None, instance=location)
if form.is_valid():
form.save()
msg = pgettext_lazy(
'Dashboard message for stock location',
'Updated location') if location_pk else pgettext_lazy(
'Dashboard message for stock location', 'Added location')
messages.success(request, msg)
return redirect('dashboard:product-stock-location-list')
return TemplateResponse(
request,
'dashboard/product/stock_location/form.html',
{'form': form, 'location': location})
def order_add_note(request, order_pk):
order = get_object_or_404(Order, pk=order_pk)
note = OrderNote(order=order, user=request.user)
form = OrderNoteForm(request.POST or None, instance=note)
status = 200
if form.is_valid():
form.save()
msg = pgettext_lazy(
'Dashboard message related to an order',
'Added note')
order.create_history_entry(comment=msg, user=request.user)
messages.success(request, msg)
elif form.errors:
status = 400
ctx = {'order': order, 'form': form}
ctx.update(csrf(request))
template = 'dashboard/order/modal/add_note.html'
return TemplateResponse(request, template, ctx, status=status)
def capture_payment(request, order_pk, payment_pk):
order = get_object_or_404(Order, pk=order_pk)
payment = get_object_or_404(order.payments, pk=payment_pk)
amount = order.get_total().quantize('0.01').gross
form = CapturePaymentForm(request.POST or None, payment=payment,
initial={'amount': amount})
if form.is_valid() and form.capture():
amount = form.cleaned_data['amount']
msg = pgettext_lazy(
'Dashboard message related to a payment',
'Captured %(amount)s') % {'amount': gross(amount)}
payment.order.create_history_entry(comment=msg, user=request.user)
messages.success(request, msg)
return redirect('dashboard:order-details', order_pk=order.pk)
status = 400 if form.errors else 200
ctx = {'captured': payment.captured_amount, 'currency': payment.currency,
'form': form, 'order': order, 'payment': payment}
return TemplateResponse(request, 'dashboard/order/modal/capture.html', ctx,
status=status)
def orderline_cancel(request, order_pk, line_pk):
order = get_object_or_404(Order, pk=order_pk)
item = get_object_or_404(OrderedItem.objects.filter(
delivery_group__order=order), pk=line_pk)
form = CancelItemsForm(data=request.POST or None, item=item)
status = 200
if form.is_valid():
msg = pgettext_lazy(
'Dashboard message related to an order line',
'Cancelled item %s') % item
with transaction.atomic():
form.cancel_item()
order.create_history_entry(comment=msg, user=request.user)
messages.success(request, msg)
return redirect('dashboard:order-details', order_pk=order.pk)
elif form.errors:
status = 400
ctx = {'order': order, 'item': item, 'form': form}
return TemplateResponse(
request, 'dashboard/order/modal/cancel_line.html',
ctx, status=status)
def ship_delivery_group(request, order_pk, group_pk):
order = get_object_or_404(Order, pk=order_pk)
group = get_object_or_404(order.groups.all(), pk=group_pk)
form = ShipGroupForm(request.POST or None, instance=group)
status = 200
if form.is_valid():
with transaction.atomic():
form.save()
msg = pgettext_lazy(
'Dashboard message related to a delivery group',
'Shipped %s') % group
messages.success(request, msg)
group.order.create_history_entry(comment=msg, user=request.user)
return redirect('dashboard:order-details', order_pk=order_pk)
elif form.errors:
status = 400
ctx = {'order': order, 'group': group, 'form': form}
template = 'dashboard/order/modal/ship_delivery_group.html'
return TemplateResponse(request, template, ctx, status=status)
def address_view(request, order_pk, address_type):
order = Order.objects.get(pk=order_pk)
if address_type == 'shipping':
address = order.shipping_address
success_msg = pgettext_lazy(
'Dashboard message',
'Updated shipping address')
else:
address = order.billing_address
success_msg = pgettext_lazy(
'Dashboard message',
'Updated billing address')
form = AddressForm(request.POST or None, instance=address)
if form.is_valid():
form.save()
order.create_history_entry(comment=success_msg, user=request.user)
messages.success(request, success_msg)
return redirect('dashboard:order-details', order_pk=order_pk)
ctx = {'order': order, 'address_type': address_type, 'form': form}
return TemplateResponse(request, 'dashboard/order/address_form.html', ctx)
def cancel_order(request, order_pk):
status = 200
order = get_object_or_404(Order, pk=order_pk)
form = CancelOrderForm(request.POST or None, order=order)
if form.is_valid():
msg = pgettext_lazy('Dashboard message', 'Cancelled order')
with transaction.atomic():
form.cancel_order()
order.create_history_entry(comment=msg, user=request.user)
messages.success(request, 'Order cancelled')
return redirect('dashboard:order-details', order_pk=order.pk)
# TODO: send status confirmation email
elif form.errors:
status = 400
ctx = {'order': order}
return TemplateResponse(request, 'dashboard/order/modal/cancel_order.html',
ctx, status=status)
def remove_order_voucher(request, order_pk):
status = 200
order = get_object_or_404(Order, pk=order_pk)
form = RemoveVoucherForm(request.POST or None, order=order)
if form.is_valid():
msg = pgettext_lazy('Dashboard message', 'Removed voucher from order')
with transaction.atomic():
form.remove_voucher()
order.create_history_entry(comment=msg, user=request.user)
messages.success(request, msg)
return redirect('dashboard:order-details', order_pk=order.pk)
elif form.errors:
status = 400
ctx = {'order': order}
return TemplateResponse(request,
'dashboard/order/modal/order_remove_voucher.html',
ctx, status=status)
def sale_edit(request, pk=None):
if pk:
instance = get_object_or_404(Sale, pk=pk)
else:
instance = Sale()
form = forms.SaleForm(
request.POST or None, instance=instance)
if form.is_valid():
instance = form.save()
msg = pgettext_lazy(
'Sale (discount) message', 'Updated sale') if pk else pgettext_lazy(
'Sale (discount) message', 'Added sale')
messages.success(request, msg)
return redirect('dashboard:sale-update', pk=instance.pk)
ctx = {'sale': instance, 'form': form}
return TemplateResponse(request, 'dashboard/discount/sale/form.html', ctx)
def get_display(status):
if status == ProductAvailabilityStatus.NOT_PUBLISHED:
return pgettext_lazy('Product status', 'not published')
elif status == ProductAvailabilityStatus.VARIANTS_MISSSING:
return pgettext_lazy('Product status', 'variants missing')
elif status == ProductAvailabilityStatus.NOT_CARRIED:
return pgettext_lazy('Product status', 'not carried')
elif status == ProductAvailabilityStatus.OUT_OF_STOCK:
return pgettext_lazy('Product status', 'out of stock')
elif status == ProductAvailabilityStatus.LOW_STOCK:
return pgettext_lazy('Product status', 'stock running low')
elif status == ProductAvailabilityStatus.NOT_YET_AVAILABLE:
return pgettext_lazy('Product status', 'not yet available')
elif status == ProductAvailabilityStatus.READY_FOR_PURCHASE:
return pgettext_lazy('Product status', 'ready for purchase')
else:
raise NotImplementedError('Unknown status: %s' % status)
def resolve(self, context):
"""Resolve this variable against a given context."""
if self.lookups is not None:
# We're dealing with a variable that needs to be resolved
value = self._resolve_lookup(context)
else:
# We're dealing with a literal, so it's already been "resolved"
value = self.literal
if self.translate:
is_safe = isinstance(value, SafeData)
msgid = value.replace('%', '%%')
msgid = mark_safe(msgid) if is_safe else msgid
if self.message_context:
return pgettext_lazy(self.message_context, msgid)
else:
return ugettext_lazy(msgid)
return value
def resolve(self, context):
"""Resolve this variable against a given context."""
if self.lookups is not None:
# We're dealing with a variable that needs to be resolved
value = self._resolve_lookup(context)
else:
# We're dealing with a literal, so it's already been "resolved"
value = self.literal
if self.translate:
is_safe = isinstance(value, SafeData)
msgid = value.replace('%', '%%')
msgid = mark_safe(msgid) if is_safe else msgid
if self.message_context:
return pgettext_lazy(self.message_context, msgid)
else:
return ugettext_lazy(msgid)
return value
def resolve(self, context):
"""Resolve this variable against a given context."""
if self.lookups is not None:
# We're dealing with a variable that needs to be resolved
value = self._resolve_lookup(context)
else:
# We're dealing with a literal, so it's already been "resolved"
value = self.literal
if self.translate:
is_safe = isinstance(value, SafeData)
msgid = value.replace('%', '%%')
msgid = mark_safe(msgid) if is_safe else msgid
if self.message_context:
return pgettext_lazy(self.message_context, msgid)
else:
return ugettext_lazy(msgid)
return value
def resolve(self, context):
"""Resolve this variable against a given context."""
if self.lookups is not None:
# We're dealing with a variable that needs to be resolved
value = self._resolve_lookup(context)
else:
# We're dealing with a literal, so it's already been "resolved"
value = self.literal
if self.translate:
is_safe = isinstance(value, SafeData)
msgid = value.replace('%', '%%')
msgid = mark_safe(msgid) if is_safe else msgid
if self.message_context:
return pgettext_lazy(self.message_context, msgid)
else:
return ugettext_lazy(msgid)
return value
def get_format(image):
format = getattr(image, "disk_format", "")
# The "container_format" attribute can actually be set to None,
# which will raise an error if you call upper() on it.
if not format:
return format
if format == "raw":
if getattr(image, "container_format") == 'docker':
return pgettext_lazy("Image format for display in table",
u"Docker")
# Most image formats are untranslated acronyms, but raw is a word
# and should be translated
return pgettext_lazy("Image format for display in table", u"Raw")
return format.upper()
def check_product_availability_and_warn(request, cart):
if contains_unavailable_variants(cart):
msg = pgettext_lazy(
'Cart warning message',
'Sorry. We don\'t have that many items in stock. '
'Quantity was set to maximum available for now.')
messages.warning(request, msg)
remove_unavailable_variants(cart)
def staff_details(request, pk):
queryset = User.objects.filter(is_staff=True)
staff_member = get_object_or_404(queryset, pk=pk)
form = StaffForm(
request.POST or None, instance=staff_member, user=request.user)
if form.is_valid():
form.save()
msg = pgettext_lazy(
'Dashboard message', 'Updated staff member %s') % staff_member
messages.success(request, msg)
redirect('dashboard:staff-list')
ctx = {'staff_member': staff_member, 'form': form}
return TemplateResponse(request, 'dashboard/staff/detail.html', ctx)
def staff_create(request):
staff = User()
form = StaffForm(request.POST or None, instance=staff)
if form.is_valid():
form.save()
msg = pgettext_lazy(
'Dashboard message', 'Added staff member %s') % staff
messages.success(request, msg)
send_set_password_email(staff)
return redirect('dashboard:staff-list')
ctx = {'form': form}
return TemplateResponse(request, 'dashboard/staff/detail.html', ctx)
def staff_delete(request, pk):
queryset = User.objects.prefetch_related(
'orders')
staff = get_object_or_404(queryset, pk=pk)
all_orders_count = staff.orders.count()
if request.method == 'POST':
staff.delete()
msg = pgettext_lazy(
'Dashboard message', 'Deleted staff member %s') % staff
messages.success(request, msg)
return redirect('dashboard:staff-list')
return TemplateResponse(
request, 'dashboard/staff/modal/confirm_delete.html',
{'staff': staff, 'orders': all_orders_count})
def shipping_method_edit(request, method):
form = ShippingMethodForm(request.POST or None, instance=method)
formset = ShippingMethodCountryFormSet(request.POST or None, instance=method)
if form.is_valid() and formset.is_valid():
shipping_method = form.save()
formset.save()
msg = pgettext_lazy(
'Dashboard message', '%(shipping_method_name)s method saved') % {
'shipping_method_name': shipping_method}
messages.success(request, msg)
return redirect(
'dashboard:shipping-method-detail', pk=shipping_method.pk)
ctx = {'shipping_method_form': form,
'price_per_country_formset': formset, 'shipping_method': method}
return TemplateResponse(request, 'dashboard/shipping/form.html', ctx)
def customer_promote_to_staff(request, pk):
customer = get_object_or_404(User, pk=pk)
if request.method == 'POST':
customer.is_staff = True
customer.save()
msg = pgettext_lazy(
'Dashboard message',
'Customer %s promoted to staff member') % customer
messages.success(request, msg)
return redirect('dashboard:customer-details', pk=customer.pk)
return TemplateResponse(
request, 'dashboard/customer/modal/confirm_promote.html',
{'customer': customer})